我对此很好奇:
有什么区别:
const int MAX_BUF = 1000;
char* Buffer = malloc(MAX_BUF);
和:
char Buffer[MAX_BUF];
最佳答案
情况 1:在
char Buffer[MAX_BUF];
Buffer
是一个大小为MAX_BUF
的数组 。分配技术称为 VLA 。情况 2:在
const int MAX_BUF = 1000; char* Buffer = malloc(MAX_BUF);
Buffer
是一个分配了大小为MAX_BUF
的内存的指针这是1000
.
并且,数组不与指针相同,并且C-FAQ has a Very Good collection detailing the reasons .
在可用性和行为方面的主要区别是:
- (1) 通常位于堆栈上,注意,而 (2) 始终位于堆上。
- (1) 一旦分配就具有固定大小,(2) 可以调整大小。
- (1) 在调用封闭函数时分配,并且具有 block 作用域 OTOH,(2) 在运行时动态分配内存,并且返回的内存具有从分配到释放的生命周期。
- (1)分配的内存不需要由程序员管理,而在(2)中所有
malloc()
d 内存应该是free()
d. [礼貌:Giorgi ]
注意:Wiki
For example, the GNU C Compiler allocates memory for VLAs on the stack.
关于c - VLA 和通过 malloc 进行动态内存分配有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49728384/