gpt4 book ai didi

c - VLA 和通过 malloc 进行动态内存分配有什么区别?

转载 作者:行者123 更新时间:2023-11-30 16:33:30 28 4
gpt4 key购买 nike

我对此很好奇:

有什么区别:

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. (1) 通常位于堆栈上,注意,而 (2) 始终位于堆上。
  2. (1) 一旦分配就具有固定大小,(2) 可以调整大小。
  3. (1) 在调用封闭函数时分配,并且具有 block 作用域 OTOH,(2) 在运行时动态分配内存,并且返回的内存具有从分配到释放的生命周期。
  4. (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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com