首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.comm是什么意思?

.comm是什么意思?
EN

Stack Overflow用户
提问于 2009-02-01 16:37:03
回答 2查看 17.1K关注 0票数 13

我刚翻译了这个程序,

代码语言:javascript
复制
#include <stdio.h>

int dam[1000][1000];


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

以装配用的gcc制作,

代码语言:javascript
复制
    .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使用堆空间、堆栈空间还是数据空间?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-01 16:54:00

as手册中:

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

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

票数 16
EN

Stack Overflow用户

发布于 2015-12-28 14:32:27

.comm名称、大小、对齐方式

.comm指令在数据段中分配存储。存储由标识符名引用。大小以字节为单位,必须为正整数。不能预定义名称。对齐是可选的。如果指定了对齐方式,名称的地址将与对齐方式的倍数对齐。

来源:https://docs.oracle.com/cd/E26502_01/html/E28388/eoiyg.html

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/501105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档