在日常的工作开发中,发现自己在写函数的时候,喜欢这样用栈操作:
#include <stdio.h>
#include <stdlib.h>
void a() {
char str[1024];
}
int main(int argc, char **argv)
{
a();
return 0;
}
这样的function函数其实问题很大,编译器会不知不觉地帮你memset了这块内存,在这里我们把代码汇编下,看下汇编后的结果。其中我们可以看到
movl $0, %eax
movl $128, %ecx
movq %rdx, %rdi
rep stosq
这里rep stosq就是把eax的内容(数值为0)拷贝到目的地址rdi中,每拷贝一次ecx减一直至ecx为0为止,具体代码如下:
.file "main.cpp"
.text
.globl _Z1av
.type _Z1av, @function
_Z1av:
.LFB2:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp