当前位置:  开发笔记 > 编程语言 > 正文

.comm是什么意思?

如何解决《.comm是什么意思?》经验,为你挑选了1个好方法。

我刚刚翻译了这个程序,

#include 

int dam[1000][1000];


int main (int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    return 0;
}

使用gcc生产组装,

    .cstring
LC0:
    .ascii "Hello, World!\0"
    .text
.globl _main
_main:
    pushl   %ebp
    movl    %esp, %ebp
    pushl   %ebx
    subl    $20, %esp
    call    L3
"L00000000001$pb":
L3:
    popl    %ebx
    leal    LC0-"L00000000001$pb"(%ebx), %eax
    movl    %eax, (%esp)
    call    L_puts$stub
    movl    $0, %eax
    addl    $20, %esp
    popl    %ebx
    leave
    ret
.comm _dam,1000000,5
    .section __IMPORT,__jump_table,symbol_stubs,self_modifying_code+pure_instructions,5
L_puts$stub:
    .indirect_symbol _puts
    hlt ; hlt ; hlt ; hlt ; hlt
    .subsections_via_symbols

.comm是什么意思?dam是否使用堆空间,堆栈空间或数据空间?



1> Eli Bendersk..:

as手册:

..comm声明一个名为symbol的常用符号.链接时,一个目标文件中的公共符号可以与另一个目标文件中的相同名称的已定义或公共符号合并.如果ld没有看到符号的定义 - 只有一个或多个公共符号 - 那么它将分配未初始化内存的长度字节.长度必须是绝对的表达.如果ld看到多个具有相同名称的公共符号,并且它们并非都具有相同的大小,则它将使用最大的大小分配空间.

使用ELF时,.comm指令采用可选的第三个参数.这是符号的期望对齐,指定为字节边界(例如,16的对齐意味着地址的最低有效4位应为零).对齐必须是绝对表达式,并且必须是2的幂.如果ld为公共符号分配未初始化的内存,则在放置符号时将使用对齐.如果未指定对齐,则将对齐设置为小于或等于符号大小的最大2的幂,最多为16.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有