bss中有28个额外字节

Ami*_*nha 6 c memory-management

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中?

小智 4

输出的最后一列readelf是对齐的,显示的值确实是“32”。因此,BSS 大小将向上舍入为最接近的 32 字节倍数。