关注
关于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段的
点赞
相关推荐
05-27 16:41
大连民族大学 软件测试 点赞 评论 收藏
分享
05-30 18:22
门头沟学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的实习日记 #
4139104次浏览 33162人参与
# 秋招投递记录 #
429102次浏览 3307人参与
# 第3届现代汽车Code Faster急速编程挑战赛 #
25645次浏览 463人参与
# 你投递的公司有几家约面了? #
174486次浏览 1044人参与
# 产品实习,你更倾向大公司or小公司 #
234711次浏览 2169人参与
# 你认为小厂实习有用吗? #
152706次浏览 805人参与
# 今年形式下双非本找得到工作吗 #
339489次浏览 1795人参与
# 为了找工作你投递了多少公司? #
120849次浏览 766人参与
# 实习返校后,你的精神状态是__? #
47460次浏览 173人参与
# 重来一次,你会对开始求职的自己说 #
55300次浏览 515人参与
# 你投了多少家公司?进展是___ #
251944次浏览 1464人参与
# 通信/硬件求职避坑tips #
179522次浏览 1176人参与
# 我的租房踩坑经历 #
230449次浏览 1306人参与
# 实习生的生存小技巧 #
41906次浏览 365人参与
# 如果有时光机,你最想去到哪个年纪? #
81847次浏览 863人参与
# 你小时候最想从事什么职业 #
170872次浏览 2080人参与
# 蚂蚁求职进展汇总 #
180253次浏览 1302人参与
# 求职遇到的搞笑事件 #
209822次浏览 1083人参与
# 发工资后,你做的第一件事是什么 #
108970次浏览 350人参与
# 体制内上岸心路历程 #
42258次浏览 245人参与
# 双非本科的出路是什么? #
236831次浏览 1668人参与