小编Ami*_*nha的帖子

bss中有28个额外字节

struct abc
{
   char cc[32];
} mystruct;

int  main()
{
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的程序时,.bss部分有64个字节.我原以为它是36个字节.mystruct为32个字节,其他库为4个字节.

如果我char cc[32]改为char cc[31]那么我在.bss中得到36个字节.

-bash-3.00$ g++ bssSize.cc

-bash-3.00$ readelf --sections ./a.out | grep bss
  [23] .bss              NOBITS          08049580 000578 000040 00  WA  0   0 32
-bash-3.00$ 
Run Code Online (Sandbox Code Playgroud)

64是十六进制的000040

为什么这些额外的28个字节在.bss中?

c memory-management

6
推荐指数
1
解决办法
165
查看次数

如何确定.data和.bss的对齐方式

.data和.bss的对齐有时是4个字节,有时是32个字节.示例1:根据下面输出的最后一列,bss和数据的对齐是32个字节

bash-3.00$ readelf --sections libmodel.so
There are 39 section headers, starting at offset 0x1908a63c:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
...
  [25] .data             PROGBITS        01e221e0 1e211e0 26ca54 00  WA  0   0 32
  [26] .bss              NOBITS          0208ec40 208dc34 374178 00  WA  0   0 32
...
Run Code Online (Sandbox Code Playgroud)

示例2:根据以下输出,对齐os .data和.bss是4个字节

bash-3.00$ readelf --sections ./a.out
There are 28 section headers, starting at offset 0x78c:

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
... …
Run Code Online (Sandbox Code Playgroud)

c memory-management

6
推荐指数
1
解决办法
990
查看次数

标签 统计

c ×2

memory-management ×2