当前位置: 技术问答>linux和unix
菜鸟请教,函数内部存在系统调用时栈空间多12byte的原因
来源: 互联网 发布时间:2015-10-23
本文导语: struct tm * fun(void) { time_t now; now = time(NULL); return localtime(&now); } 汇编代码: pushl %ebp movl %esp, %ebp subl $4, %esp subl $12, %esp .... 不理解为什么会有subl $12, %esp这一句?如果我不调用time,仅使用自...
struct tm * fun(void)
{
time_t now;
now = time(NULL);
return localtime(&now);
}
汇编代码:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
subl $12, %esp
....
不理解为什么会有subl $12, %esp这一句?如果我不调用time,仅使用自己定义的一个函数就不会出现这个。
还有,在main函数里
.file "ttt.c"
.text
.globl main
.type main,@function
main:
#that's an empty main function
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
leave
ret
.Lfe1:
.size main,.Lfe1-main
.ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"
为什么即使是一个空函数也会出现
subl $8, %esp
andl %-16, %esp使得栈地址16bytes对齐,为什么要这样做?
谢谢
{
time_t now;
now = time(NULL);
return localtime(&now);
}
汇编代码:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
subl $12, %esp
....
不理解为什么会有subl $12, %esp这一句?如果我不调用time,仅使用自己定义的一个函数就不会出现这个。
还有,在main函数里
.file "ttt.c"
.text
.globl main
.type main,@function
main:
#that's an empty main function
pushl %ebp
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
movl $0, %eax
subl %eax, %esp
leave
ret
.Lfe1:
.size main,.Lfe1-main
.ident "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"
为什么即使是一个空函数也会出现
subl $8, %esp
andl %-16, %esp使得栈地址16bytes对齐,为什么要这样做?
谢谢
|
这关系到Linux内核进程相关的实现,记不太清了
subl $8, %esp 应该是留给 int argc 和 char ** argv两个参数的
subl $8, %esp 应该是留给 int argc 和 char ** argv两个参数的
|
栈按16字节对齐可以提高性能
|
小弟创建了一个软件开发交流群,欢迎大家加入,群号是13181795