C++各变量在不同数据段的分配(全局(静态)变量,Const,局部变量等)

环境Ubuntu 64位系统 + g++5.4
1.static变量或全局变量生命周期为程序生命周期,存放在bss段(全局未初始化段)或者全局数据段。
2.函数内局部变量(含const变量)在栈内。
3.动态分配在堆内。

g_iUnInit 's addr=0x6022b4 value:0 //全局未初始化变量 bss段
g_iInit 's addr=0x6020a0 value:100 //全局已初始化变量 全局数据段
stiUnInit 's addr=0x6022bc value:0 //静态(函数体外)为初始化变量 bss段
stiInit 's addr=0x6020a4 value:10 // 静态已初始化变量 全局数据段
ciInit 's addr=0x401404 value:11 //全局const变量(const实际只在当前文件可见) rodata段 只读数据段
l_stiUnInit 's addr=0x6022c0 value:0 //main函数内 静态未初始化变量 bss段
l_stiInit 's addr=0x6020a8 value:2 // main函数内 静态已初始化变量 全局数据段
l_iUnInit 's addr=0x7ffd7f2b285c value:0 //main函数内 未初始化变量 栈内
l_iInit 's addr=0x7ffd7f2b2860 value:3//main函数内 已初始化变量 栈内
l_ci 's addr=0x7ffd7f2b2864 value:4 //main函数内 已初始化const变量 栈内
new char addr:0x87e030 //main函数内 new分配变量 堆内
malloc int addr:0x87e050//main函数内 malloc分配变量 堆内

readelf -S known 查看可执行文件elf信息:
There are 31 section headers, starting at offset 0x2ed0:

Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .interp PROGBITS 0000000000400238 00000238
000000000000001c 0000000000000000 A 0 0 1
[ 2] .note.ABI-tag NOTE 0000000000400254 00000254
0000000000000020 0000000000000000 A 0 0 4
[ 3] .note.gnu.build-i NOTE 0000000000400274 00000274
0000000000000024 0000000000000000 A 0 0 4
[ 4] .gnu.hash GNU_HASH 0000000000400298 00000298
0000000000000030 0000000000000000 A 5 0 8
[ 5] .dynsym DYNSYM 00000000004002c8 000002c8
00000000000001e0 0000000000000018 A 6 1 8
[ 6] .dynstr STRTAB 00000000004004a8 000004a8
00000000000001b2 0000000000000000 A 0 0 1
[ 7] .gnu.version VERSYM 000000000040065a 0000065a
0000000000000028 0000000000000002 A 5 0 2
[ 8] .gnu.version_r VERNEED 0000000000400688 00000688
0000000000000050 0000000000000000 A 6 2 8
[ 9] .rela.dyn RELA 00000000004006d8 000006d8
0000000000000030 0000000000000018 A 5 0 8
[10] .rela.plt RELA 0000000000400708 00000708
0000000000000150 0000000000000018 AI 5 24 8
[11] .init PROGBITS 0000000000400858 00000858
000000000000001a 0000000000000000 AX 0 0 4
[12] .plt PROGBITS 0000000000400880 00000880
00000000000000f0 0000000000000010 AX 0 0 16
[13] .plt.got PROGBITS 0000000000400970 00000970
0000000000000008 0000000000000000 AX 0 0 8
[14] .text PROGBITS 0000000000400980 00000980 代码段 size:5d2
00000000000005d2 0000000000000000 AX 0 0 16
起始地址:0000000000400980
[15] .fini PROGBITS 0000000000400f54 00000f54
0000000000000009 0000000000000000 AX 0 0 4
[16] .rodata PROGBITS 0000000000400f60 00000f60 只读数据段 size 0x92
0000000000000092 0000000000000000 A 0 0 4
起始地址:0000000000400f60
[17] .eh_frame_hdr PROGBITS 0000000000400ff4 00000ff4
0000000000000044 0000000000000000 A 0 0 4
[18] .eh_frame PROGBITS 0000000000401038 00001038
000000000000013c 0000000000000000 A 0 0 8
[19] .init_array INIT_ARRAY 0000000000601df8 00001df8
0000000000000010 0000000000000000 WA 0 0 8
[20] .fini_array FINI_ARRAY 0000000000601e08 00001e08
0000000000000008 0000000000000000 WA 0 0 8
[21] .jcr PROGBITS 0000000000601e10 00001e10
0000000000000008 0000000000000000 WA 0 0 8
[22] .dynamic DYNAMIC 0000000000601e18 00001e18
00000000000001e0 0000000000000010 WA 6 0 8
[23] .got PROGBITS 0000000000601ff8 00001ff8
0000000000000008 0000000000000008 WA 0 0 8
[24] .got.plt PROGBITS 0000000000602000 00002000
0000000000000088 0000000000000008 WA 0 0 8
[25] .data PROGBITS 0000000000602088 00002088 全局数据段 size 1c
000000000000001c 0000000000000000 WA 0 0 8
地址:0000000000602088
[26] .bss NOBITS 00000000006020c0 000020a4 BSS段: size 0x128
0000000000000128 0000000000000000 WA 0 0 32
地址:00000000006020c0
[27] .comment PROGBITS 0000000000000000 000020a4
0000000000000035 0000000000000001 MS 0 0 1
[28] .shstrtab STRTAB 0000000000000000 00002dc3
000000000000010c 0000000000000000 0 0 1
[29] .symtab SYMTAB 0000000000000000 000020e0
0000000000000870 0000000000000018 30 55 8
[30] .strtab STRTAB 0000000000000000 00002950
0000000000000473 0000000000000000 0 0 1
Key to Flags:
W (write), A (alloc), X (execute), M (merge), S (strings), l (large)
I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
O (extra OS processing required) o (OS specific), p (processor specific)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值