小编Dom*_*ice的帖子

编译器如何在堆栈上初始化默认值为零的本地数组?

让我们假设我int在函数中定义了一个默认值为0 的本地s 数组:

void test() {
    int array[256] = {0};
}
Run Code Online (Sandbox Code Playgroud)

我对此的理解是:

通过将256个零推入堆栈并因此增加堆栈指针,数组将存储在堆栈中.如果数组没有默认值,那么增加堆栈指针就足够了.

现在这是前一个片段生成的汇编代码:

test:
.LFB2:
    .cfi_startproc
    pushl   %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    pushl   %edi
    pushl   %ebx
    subl    $1024, %esp
    .cfi_offset 7, -12
    .cfi_offset 3, -16
    leal    -1032(%ebp), %ebx
    movl    $0, %eax
    movl    $256, %edx
    movl    %ebx, %edi
    movl    %edx, %ecx
    rep stosl
    addl    $1024, %esp
    popl    %ebx
    .cfi_restore 3
    popl    %edi
    .cfi_restore 7
    popl    %ebp
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret …
Run Code Online (Sandbox Code Playgroud)

c arrays assembly stack-memory

3
推荐指数
1
解决办法
176
查看次数

标签 统计

arrays ×1

assembly ×1

c ×1

stack-memory ×1