关于C:静态数组分配

Static array allocation

本问题已经有最佳答案,请猛点这里访问。

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

我的问题是,数组和指针声明为静态意味着什么?它如何影响调用alloc的函数?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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;
}


My question is that what does it mean that the array and pointer are declared static?

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

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