让我们假设我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)