|
最近做一个程序要求 size 尽量小,但用 objdump 的结果发现编译器将我的常量字符串(即 printf 用的各个常量字符串)放到了两个只读数据段中,分别是
- .rodata.str.1 (byte aligned)
- .rodata.str.32 (32 byte aligned)
复制代码
这个 (32 byte aligned) 的 section 就比较讨厌了,给我的文件添加了好多零字节。我又用不同的源文件测试了发现常量字符串放入 .rodata.str.1 还是 .rodata.str.32 似乎是随机的!我想 string 之类的东西对齐与不对齐有何分别呢,又不像 integer 对齐了能提高效率,所以一定要把 const string 都放到 .rodata.str.1 中!在 info gcc 中找了很多,编译用了如下参数:
- gcc -Wall -Wunused -Wmissing-prototypes -falign-functions=1 -falign-loops=1 -falign-jump=1 -falign-labels=1
- -fstrength-reduce -mcpu=pentium3 -masm=intel -fstrength-reduce -Os -s -nostdinc -fno-builtin ...
复制代码
发觉还是没有达到将常量字符串放入字节对齐的 section 这个目的,只好贴上论坛请教各位大侠,不知有何良策没有? |
|