关于代码段、只读数据段、常量段的疑问

njustlihao 2014-08-07 06:34:02
问题一:
一个函数内定义一个静态局部变量
static int a=5;
编译时a应该存放在DATA段内,
那如果我定义一个局部的静态数组
static char b[10]="abc";
那么数组b也应该存放在DATA段中吧?如果是,编译时是否DATA段中b数组的空间内已经存放字符串“abc”?还是“abc”被存放到只读数据段中?

问题二:
如果对变量a进行计算:
a=a+1;
那么编译时这个1是否算常量被存放在只读数据区?还仅仅是代码区的一个二进制数?
...全文
763 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
movsd 2014-08-08
  • 打赏
  • 举报
回复
引用 7 楼 u012672079 的回复:
[quote=引用 5 楼 movsd 的回复:] [quote=引用 3 楼 u012672079 的回复:] [quote=引用 1 楼 movsd 的回复:] 一:"abc"直接存放在DATA段 二:会被优化成加1指令,不需要存放1这个数字,如果不是加1,这个数字就会存放在代码TEXT段
假如不是局部静态数组而是动态数组 char b[10]="abc"; 是不是编译时字符串”abc“被存放在只读数据段?[/quote] 会存放在data段,如果是局部的,会被编译成运行时分配栈空间并从data段拷贝字符串[/quote] 这个data段是rwdata还是rodata呢? [/quote] data是readwrite,rdata是readonly
赵4老师 2014-08-07
  • 打赏
  • 举报
回复
参考gcc源代码
njustlihao 2014-08-07
  • 打赏
  • 举报
回复
引用 5 楼 movsd 的回复:
[quote=引用 3 楼 u012672079 的回复:] [quote=引用 1 楼 movsd 的回复:] 一:"abc"直接存放在DATA段 二:会被优化成加1指令,不需要存放1这个数字,如果不是加1,这个数字就会存放在代码TEXT段
假如不是局部静态数组而是动态数组 char b[10]="abc"; 是不是编译时字符串”abc“被存放在只读数据段?[/quote] 会存放在data段,如果是局部的,会被编译成运行时分配栈空间并从data段拷贝字符串[/quote] 这个data段是rwdata还是rodata呢?
movsd 2014-08-07
  • 打赏
  • 举报
回复
引用 5 楼 movsd 的回复:
[quote=引用 3 楼 u012672079 的回复:] [quote=引用 1 楼 movsd 的回复:] 一:"abc"直接存放在DATA段 二:会被优化成加1指令,不需要存放1这个数字,如果不是加1,这个数字就会存放在代码TEXT段
假如不是局部静态数组而是动态数组 char b[10]="abc"; 是不是编译时字符串”abc“被存放在只读数据段?[/quote] 会存放在data段,如果是局部的,会被编译成运行时分配栈空间并从data段拷贝字符串[/quote] 如果字符串很短,会被优化成几条MOV指令,那就存放在代码段了
movsd 2014-08-07
  • 打赏
  • 举报
回复
引用 3 楼 u012672079 的回复:
[quote=引用 1 楼 movsd 的回复:] 一:"abc"直接存放在DATA段 二:会被优化成加1指令,不需要存放1这个数字,如果不是加1,这个数字就会存放在代码TEXT段
假如不是局部静态数组而是动态数组 char b[10]="abc"; 是不是编译时字符串”abc“被存放在只读数据段?[/quote] 会存放在data段,如果是局部的,会被编译成运行时分配栈空间并从data段拷贝字符串
movsd 2014-08-07
  • 打赏
  • 举报
回复
全局变量: const char b[]="abc"; // "abc"存放在rdata段,可不加static关键字 局部变量: static const char c[]="def"; // "def"存放在rdata段 对于const char *d="hijk";这种写法,按理也应该放在rdata段,但使用VC编译器,不管是在全局还是局部,加或不加static关键字,都会把"hijk"放在data段中,其他编译器不知道
njustlihao 2014-08-07
  • 打赏
  • 举报
回复
引用 1 楼 movsd 的回复:
一:"abc"直接存放在DATA段 二:会被优化成加1指令,不需要存放1这个数字,如果不是加1,这个数字就会存放在代码TEXT段
假如不是局部静态数组而是动态数组 char b[10]="abc"; 是不是编译时字符串”abc“被存放在只读数据段?
njustlihao 2014-08-07
  • 打赏
  • 举报
回复
引用 1 楼 movsd 的回复:
一:"abc"直接存放在DATA段 二:会被优化成加1指令,不需要存放1这个数字,如果不是加1,这个数字就会存放在代码TEXT段
谢谢您,那我在书上看到的字符串常量在编译时存放在只读数据段是在什么情况下发生呢? 如果把字符串赋给char型指针的话,字符串在编译时被存放在什么位置呢?
movsd 2014-08-07
  • 打赏
  • 举报
回复
一:"abc"直接存放在DATA段 二:会被优化成加1指令,不需要存放1这个数字,如果不是加1,这个数字就会存放在代码TEXT段

65,183

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧