关注
关于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段的
点赞
相关推荐
投递蔚来等公司10个岗位 >
点赞 评论 收藏
转发
牛客热帖
正在热议
# 和牛牛一起刷题打卡 #
9282次浏览 810人参与
# 机械制造薪资爆料 #
347717次浏览 4098人参与
# 牛客帮帮团来啦!有问必答 #
1052678次浏览 15959人参与
# 通信硬件薪资爆料 #
250034次浏览 2357人参与
# 你收到了团子的OC了吗 #
524676次浏览 6230人参与
# 毕业租房也有小确幸 #
38113次浏览 3132人参与
# 你怎么评价今年的春招? #
9115次浏览 158人参与
# 晒一晒我的offer #
3721926次浏览 57493人参与
# 提前批和秋招有什么区别 #
28774次浏览 695人参与
# 面试中,你被问过哪些奇葩问题? #
19178次浏览 148人参与
# 秋招开了,你想投哪些公司呢 #
132250次浏览 3421人参与
# 来选选带哪个offer回家过年 #
191444次浏览 1835人参与
# 实习生应该准时下班吗 #
87997次浏览 646人参与
# 你的秋招进行到哪一步了 #
392378次浏览 6638人参与
# 春招你拿到offer了吗 #
397427次浏览 5740人参与
# 腾讯工作体验 #
151036次浏览 1475人参与
# 我想象的工作vs实际工作 #
104043次浏览 1679人参与
# 百度工作体验 #
28499次浏览 286人参与
# 如何写一份好简历 #
308826次浏览 4406人参与
# 担心入职之后被发现很菜怎么办 #
37078次浏览 311人参与