|
|
1
2
很显然,我成功地回答了这个问题,没有看到代码和错误信息。是时候打开我的psi咨询了。 关于Linux/ELF目标上的链接,重要的是要记住,链接器在尝试满足/解析符号时,正在合并(并复制到最终可执行文件)部分(aka segments)。通常,应用程序有.text(代码段)、.rodata(只读数据)段、.data(r/w初始化数据)段、.bss(未初始化数据)段等。因此,如果需要符号,例如,一个编译文件中的三个函数,则会选择文件的整个.text部分。如果未使用但存在于节函数中的函数调用其他内容,链接器将开始搜索要满足的“其他内容”,即使它与应用程序无关。 另外,还有一些C++特定的东西:对于具有虚拟函数的类,编译器生成VTABLE,指针指向每个虚拟函数,并将该表移动到.RoDATA节。注意,那是什么 我们认为as代码实际上结束于(只读)数据部分。 如果您只定义了一个虚拟函数,那么链接器很可能会抱怨错误消息,如
这个故事的寓意是:把代码和数据分割成尽可能小的部分,你的链接原子。理想情况下,每个函数都进入自己的部分,以及一段初始化或r/o数据。
一般来说,人们应该期望链接器使用更多的RAM,可能是较慢的链接阶段,但更小更快的应用程序。 命令行使用,看一下GCC手册wrt选项的含义。
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |