gpt4 book ai didi

c - c中的静态局部数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:32 27 4
gpt4 key购买 nike

当我按以下方式在 C 中声明一个数组时,所有 24 个字节都被放入堆栈:

void func(void){char array[24];} 

但是,当我使用这样的声明时,编译器会将数组放入 BSS RAM 中:

void func(void){static char array[24];}

是否有规则可以放入堆栈的最长数组是多少?或者当我有一个本地数组时,它应该始终声明为静态吗?

最佳答案

void func(void){char array[24];} 

all 25 bytes are put in to stack.

24 字节,而不是 25。

Is there a rule what is the longest array that I can put in to stack or when I have a local array it should be always declared as static?

没有这样的规则,你只需要合理,其中“合理”取决于你的平台(例如,它在具有 4k 堆栈的内核中比在通常具有 ~1MB 堆栈的用户空间应用程序中更少)。

但是,出于速度原因,我建议不要将本地数组更改为静态数组。函数静态变量仍然具有全局变量的缺点,它们使函数不可重入。这可能是问题,也可能不是问题,但处理过度使用堆栈时的首选解决方案应该是将变量移动到空闲存储区:

void func(void){
char* array=malloc(24);
/* do something */
free(array);
}

关于c - c中的静态局部数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11034724/

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