GNU 链接器 LENGTH 部分乘数

GNU linker LENGTH section multiplication factor

链接器文件中内存命令的长度部分采用K、M符号表示千字节、兆字节等。乘数是1000还是1024?

我知道这是几个月后的事了,但我自己也在想 K 和 M 部分。

LD 手册指出表达式“必须仅为数值且求值为常量”。然后它愉快地继续使用一个有点令人不安的 256K 和 4M 的例子!

相关的源代码文件(在 binutils/ld 中)似乎是 ldlex.l 和 ldgram.y。在词法分析器中,表达式可以以 [M|K|m|k].

结尾

对于 M 或 m,该值乘以 1024 * 1024。
对于K或k,该值乘以1024。

编辑:我单独阅读了 LD 手册的部分内容,这可能会产生误导!当我阅读更多链接器手册时,我可以看到它确实指定了数字常量的含义,其中确实包括像 K 和 M 这样的后缀: https://sourceware.org/binutils/docs/ld/Constants.html#Constants