常量局部变量数组在内存中用于’C’程序
发布时间:2020-12-16 10:26:21 所属栏目:百科 来源:网络整理
导读:我正在使用GCC 4.8.1,它似乎没有将const变量本地存储在DATA段的main中.下面是3个这样的程序的代码和内存映射: 代码1: int main(void) { //char a[10]="HELLO"; //1 //const char a[10] = "HELLO"; //2 return 0; } MEMORY MAP FOR ABOVE: text data bss de
我正在使用GCC 4.8.1,它似乎没有将const变量本地存储在DATA段的main中.下面是3个这样的程序的代码和内存映射:
代码1: int main(void) { //char a[10]="HELLO"; //1 //const char a[10] = "HELLO"; //2 return 0; } MEMORY MAP FOR ABOVE: text data bss dec hex filename 7264 1688 1040 9992 2708 a.exe 代码2: int main(void) { char a[10]="HELLO"; //const char a[10] = "HELLO"; return 0; } MEMORY MAP FOR 2: text data bss dec hex filename 7280 1688 1040 10008 2718 a.exe 代码3: int main(void) { //char a[10]="HELLO"; const char a[10] = "HELLO"; return 0; } MEMORY MAP FOR 3 : text data bss dec hex filename 7280 1688 1040 10008 2718 a.exe 我没有看到3个代码之间的数据段有任何差异.有人可以向我解释这个结果. 在期待中感谢! 解决方法
这是应该发生的事情:
代码1:任何地方都没有存储. 代码2:a存储在堆栈中.它不存储在.data中. 代码3a要么存储在堆栈中,要么存储在.rodata中,具体取决于它是否使用常量表达式进行初始化.优化器也可能决定将其存储在.text中(与代码一起).
那是因为应该没有区别. .data用于具有静态存储持续时间的非常量变量,初始化为非零值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |