.lcomm和comm的区别

最简单的区别就是.lcomm是本地的,l表示local。但问题的关键是什么是本地的?汇编还有非本地的吗?
先说结论:
这里的本地指的就是单个obj文件。因为你用到的Symbol(变量)有可能来自多个obj文件。简单来说,如果是单个obj文件就用.lcomm,如果有多个obj文件,可以考虑用.comm,如果有必要的话。

详细可以看下面的解释。
为了弄清楚这个,特别查了资料。
首先看看官方手册怎么说的

.lcomm的定义
https://sourceware.org/binutils/docs/as/Lcomm.html

Reserve length (an absolute expression) bytes for a local common denoted by symbol. The section and value of symbol are those of the new local common. The addresses are allocated in the bss section, so that at run-time the bytes start off zeroed. Symbol is not declared global (see .global), so is normally not visible to ld.
用符号表示的局部公共字节的保留长度(绝对表达式)字节。符号的部分和值是那些新的本地共性。地址在bss部分中分配,以便在运行时字节开始为零。符号未声明为全局(请参见.global),因此通常对ld不可见。
Some targets permit a third argument to be used with .lcomm. This argument specifies the desired alignment of the symbol in the bss section.
有些目标允许.lcomm使用第三个参数。这个参数指定了在bss部分中的该符号的所需对齐方式。
The syntax for .lcomm differs slightly on the HPPA. The syntax is ‘symbol .lcomm, length’; symbol is optional.
.lcomm在HPPA(惠普公司的PA-RSIC——精简指令技术)上的语法略有不同。语法为“symbol .lcomm, length”;symbol可以省略。

从官方这段解释唯一有点用的就是对ld不可见这句话。但对ld不可见又是什么意思?我们来看一下.comm的官方解释就明白了。
.comm
https://sourceware.org/binutils/docs-2.37/as.html#Comm
定义还是有挺多东西的,不过对于这篇文章主题没什么用。只讲主题相关的,其它可以看链接中的详细内容。文档中第一句话是:
.comm declares a common symbol named symbol. When linking, a common symbol in one object file may be merged with a defined or common symbol of the same name in another object file.
.comm声明了一个名为符号的公共符号。当链接时,一个对象文件中的公共符号可以与另一个(object file)对象文件中定义的或相同名称的公共符号合并。

第一句话实际上就已经说出了.lcomm和comm的本质区别,关键区别在于是否meaged with another object file。也就是是否会和别的.obj文件合并。其实非常简单,我们知道在C语言中多个.obj文件是可以链接成一个可执行文件的,汇编也是一样。也就是说,如果你写的汇编源文件从头到尾就一个文件,那么你用.lcomm就行了。如果可能涉及多个obj文件的,那么可以用.comm,如果有必要的话。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值