const的内存布局?

Microsues 2011-09-06 07:13:47
C++中,const修饰的对象的内存布局是怎样的?
大牛 @@bnu_chenshuo http://weibo.com/n/bnu_chenshuo 在微博指出:stack, bss, data, rodata, heap, "register" 之一。
那位能否各举一例对应上面的情况?
...全文
118 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2011-09-06
  • 打赏
  • 举报
回复
楼主啊,你到你认为的那个大牛的微博去回评论,求答案吧。
解铃还须系铃人啊。
免得这里的人误导你啊。
yby4769250 2011-09-06
  • 打赏
  • 举报
回复
const限定的不是存储位置(除了某种情况下const会导致常量折叠而没有存储位置之外),而是限制读写权限,因此跟不加const时,变量在哪就是哪
至善者善之敌 2011-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 babilife 的回复:]
int a = 0; 全局初始化区
char *p1; 全局未初始化区
const int g=10; 常量区
main()
{
const int h=1; 栈
int b; 栈
char s[] = "abc";栈
char *p2; 栈
……
[/Quote]

其实上面的局部和全局的COSNT我并拿不准他具体在什么位置存储

引用《C++编程思想》中的一段
C/C++ code

C++中的const默认为内部连接,也就是说,const仅在const被定义过的文件里才是可见的,而在连接时不能被其他编译单元看到。当定义一个const时,必须赋一个值给它,除非用extern作出了清楚的说明。
通常C++编译器并不为const创建存储空间,相反它把这个定义保存在它的符号表里。但是extern强制进行了存储空间分配(另外还有一些情况,如取一个const的地址,也要进行存储空间分配),由于extern意味着使用外部连接,因此必须分配存储空间,这也就是说有几个不同的编译单元应当能够引用它,所以它必须存储空间。
至善者善之敌 2011-09-06
  • 打赏
  • 举报
回复
int a = 0; 全局初始化区
char *p1; 全局未初始化区
const int g=10; 常量区
main()
{
const int h=1; 栈
int b; 栈
char s[] = "abc";栈
char *p2; 栈
char *p3 = "123456"; 123456\0在常量区,p3在栈上。
static int c =0; 全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456"); 123456\0放在常量区,编译器可能会将它与p3所指向的"12345
6"优化成一块。
}
jackyjkchen 2011-09-06
  • 打赏
  • 举报
回复
不过你要考虑常量折叠不分配内存

全局变量const型也默认了static
xunxun 2011-09-06
  • 打赏
  • 举报
回复
强烈建议这种一一列举的分数至少给到300分
jackyjkchen 2011-09-06
  • 打赏
  • 举报
回复
……两条裤衩了,别玩这种一一列举的措辞了

你去掉const他在什么位置,那const之后一般不变

64,637

社区成员

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

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