【问题标题】:Static array allocation [duplicate]静态数组分配[重复]
【发布时间】:2015-09-23 20:22:11
【问题描述】:

我有这个 alloc 的实现,它将内存分配为一个动态数组。

我的问题是,数组和指针被声明为静态是什么意思?对调用 alloc 的函数有何影响?

#define ALLOCSIZE 10000 /* size of available space */

static char allocbuf[ALLOCSIZE];   /* storage for alloc */
static char *allocp = allocbuf;    /* next free position */

char *alloc(int n)   /* return pointer to n characters */
{

    if (allocbuf + ALLOCSIZE - allocp >= n) {  /* it fits */
        allocp += n;
        return allocp - n; /* old p */
    }  else               /* not enough room */
        return 0;
}

【问题讨论】:

  • “我有这个 alloc 的实现,它将内存分配为一个动态数组”。您的代码中似乎没有任何动态数组。
  • @AlanAu 定义 动态
  • 您不应该使用0 作为空指针常量。而是使用 NULL 宏。请注意,即使是 C++ 也吸取了这一教训,支持 nullptr

标签: c memory static allocation


【解决方案1】:

我的问题是,数组和指针被声明为静态是什么意思?

这意味着数组的生命周期是程序的整个执行过程。在文件范围定义的任何对象(带有或不带有 static 说明符)都具有静态存储持续时间(例外:使用 C11 _Thread_local 说明符定义的对象)。添加static 说明符将对象的可见性限制在它们定义的源文件中。

alloc 分配的总大小受allocbuf 数组大小的限制。

【讨论】:

  • 那么添加静态说明符只会限制对象对源文件的可见性?
  • @user004325 是的,对于在文件范围内定义的对象,添加 static(相对于没有存储说明符)使对象成为翻译单元的私有对象。
  • 这在实践中意味着什么?
  • @user004325 你不能直接从另一个源文件访问allocbuf 数组,这就是在这里添加static 的目的。 allocbuf 存在是对 alloc 用户隐藏的实现细节。
  • alloc 做动态内存分配吗?
猜你喜欢
  • 2018-10-01
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2020-09-18
相关资源
最近更新 更多