关注
关于3.1 const常量的存放位置,应该存在在.rodata只读数据段,见如下实验:
ubuntu 20.04 gcc9.4.0 下面程序:
#include <stdio.h>
(30951)#define HELLO "world\n"
const int i = 10;
int const j = 20;
char *p = "hello ubuntu\n";
int main(void){
char c_val = 'a';
printf("hello%s",HELLO);
printf("%s",p);
printf("c_val = %c\n",c_val);
return 0;
}使用gcc编译之后,使用objdump -j .rodata -s a.out之后得到
a.out: file format elf64-x86-64
Contents of section .rodata:
2000 01000200 0a000000 14000000 68656c6c ............hell
2010 6f207562 756e7475 0a00776f 726c640a o ubuntu..world.
2020 0068656c 6c6f2573 00257300 635f7661 .hello%s.%s.c_va
2030 6c203d20 25630a00 l = %c..然后通过readelf -s a.out和readelf -S a.out可以看到变量i和j通过const修饰后也放在了.rodata段。
[18] .rodata PROGBITS 0000000000002000 00002000
0000000000000038 0000000000000000 A 0 0 4
[25] .data PROGBITS 0000000000004000 00003000
0000000000000018 0000000000000000 WA 0 0 8
54: 0000000000002008 4 OBJECT GLOBAL DEFAULT 18 j
67: 0000000000002004 4 OBJECT GLOBAL DEFAULT 18 i
56: 0000000000004010 8 OBJECT GLOBAL DEFAULT 25 p
可以看到字符串常量,const型常量存放在只读数据区,但是指针p是在.data段的
点赞
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的求职总结 #
35815次浏览 568人参与
# 国企vs私企,怎么选? #
21434次浏览 172人参与
# 一人一个landing小技巧 #
40591次浏览 719人参与
# 你收到了团子的OC了吗 #
1318406次浏览 11650人参与
# 机械人值得去的国央企 #
60176次浏览 408人参与
# 如果重来一次你还会读研吗 #
169598次浏览 1764人参与
# 应届生第一份工作最好去大厂吗? #
17363次浏览 434人参与
# 怎么防止在试用期被辞退 #
118951次浏览 894人参与
# 辞职之后最想做的一件事 #
12819次浏览 176人参与
# 你觉得专业和学校哪个对薪资影响最大 #
55767次浏览 459人参与
# 联想工作体验 #
24402次浏览 166人参与
# 薪资一样,你会选择去大厂还是小公司 #
17584次浏览 106人参与
# 工作中的卑微时刻 #
9673次浏览 58人参与
# 校招第一份工作你干了多久? #
68918次浏览 338人参与
# 选offer应该考虑哪些因素 #
25191次浏览 344人参与
# 考公还是考研,你怎么选? #
24881次浏览 127人参与
# 大厂还是考编 #
86913次浏览 1312人参与
# 毕业季,给职场新人一些建议 #
33746次浏览 535人参与
# 为了秋招你都做了哪些准备? #
11711次浏览 175人参与
# 选完offer后,你后悔学本专业吗 #
43631次浏览 227人参与