汇编程序应按什么顺序进入源文件:从内到外还是相反?主代码(不在proc中)应该放在哪里:文件的开头或结尾附近?是否有客观标准可供选择,而不仅仅是公约?
没有约定;通常会将相关功能放在源代码中彼此靠近。
或者为了性能起见,将“热”功能分组在一起,使其位于同一iTLB页面中,甚至对于小功能,或者在一个结束处,下一个开始处的边界处,甚至是相同的L1指令高速缓存行。例如将相互调用或经常彼此调用的函数归为一组。
如果要使源顺序不同于二进制顺序,则可以将“冷”函数(在启动或关闭时调用一次)放在诸如.text.startup
的区域中,而不是通常的.text
区域; GCC为此,例如使用main
而不是通常的.text
指令
.section .text.startup,"ax",@progbits
.globl main
main:
...
.text # shorthand for .section .text
other_function:
(["ax",@progbits
对于ELF目标意味着执行权限,并且该部分应该映射到进程内存中,而不是直接放在磁盘上的可执行文件中,而不会被程序加载器映射。或更具体地说,链接到ELF < [segment(具有这些属性)。