大佬教程收集整理的这篇文章主要介绍了为什么常量存储在C存储器映射中的文本段中?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <stdio.h> int global = 2; int main(void) { int local = 0; return 0; } text data bss dec hex filename 1092 500 16 1608 648 mem
这里因为有一个全局变量初始化为2.它已存储在数据段中
考虑将其设为const如下所示的情况
#include <stdio.h> int const global = 2; int main(void) { int local = 0; return 0; } text data bss dec hex filename 1096 496 16 1608 648 mem
这里全局变量从数据段移动到文本段.
为什么它从数据移到文本段?
由于数据段分为读写区域,它应该存储在数据的读取区域中吗?
$size test.o # compiled from the code in the question text data bss dec hex filename 58 0 0 58 3a test.o $size -A test.o test.o : section size addr .text 6 0 .data 0 0 .bss 0 0 .rodata 4 0 .comment 29 0 .note.GNU-stack 0 0 .eh_frame 48 0 @R_549_10586@l 87
看看第一个命令产生的“文本”号是如何由第二个问题产生的.text,.rodata和.eh_frame数字的总和?
您可以使用objdump命令告诉常量是.rodata而不是.text:
$objdump -t test.o | grep -w global 0000000000000000 g O .rodata 0000000000000004 global
(‘g’表示全局,’O’表示’Object’而不是’F’表示Function.)
以上是大佬教程为你收集整理的为什么常量存储在C存储器映射中的文本段中?全部内容,希望文章能够帮你解决为什么常量存储在C存储器映射中的文本段中?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。