有一个小问题,新手提问

orangeshing 2007-11-30 01:39:36
void testWhile()
{
4013f0: 55 push %ebp
4013f1: 89 e5 mov %esp,%ebp
4013f3: 81 ec 28 03 00 00 sub $0x328,%esp
double farray[100] ;
}
4013f9: c9 leave
4013fa: c3 ret
4013fb: 90 nop


一个函数里为farray保留空间为什么是0x328,也就是808byte , 多出来的8个byte是做什么的?
...全文
80 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
czlyc006 2007-11-30
  • 打赏
  • 举报
回复
这个也许能有些帮助:
http://www.linuxpk.com/6047.html
dongyi940333 2007-11-30
  • 打赏
  • 举报
回复
LZ看一下这个:

http://topic.csdn.net/u/20070506/20/e6041046-8502-4fb2-85f1-55a60370be21.html

初学不对之处请原谅!!!
orangeshing 2007-11-30
  • 打赏
  • 举报
回复
我觉得你说的对,但是
对齐的规则是怎么样的?
我想把它搞清楚
czlyc006 2007-11-30
  • 打赏
  • 举报
回复
是为了将局部变量的内存边界值对齐
orangeshing 2007-11-30
  • 打赏
  • 举报
回复
我用的是gcc的编译器
zhgwbzhd 2007-11-30
  • 打赏
  • 举报
回复
俺觉得这个是由编译器来管理的。
具体编译器是如何来实现的,俺也不太清楚。
orangeshing 2007-11-30
  • 打赏
  • 举报
回复
void testWhile()
{
4013f0: 55 push %ebp
4013f1: 89 e5 mov %esp,%ebp
4013f3: 81 ec 38 03 00 00 sub $0x338,%esp
double farray[100] ;//__attribute__(aligned(4));
int i=0;
4013f9: c7 85 d4 fc ff ff 00 movl $0x0,0xfffffcd4(%ebp)
401400: 00 00 00
int a=0;
401403: c7 85 d0 fc ff ff 00 movl $0x0,0xfffffcd0(%ebp)
40140a: 00 00 00
int b=0;
40140d: c7 85 cc fc ff ff 00 movl $0x0,0xfffffccc(%ebp)
401414: 00 00 00
}
401417: c9 leave
401418: c3 ret
401419: 90 nop

再定义一个int变量,局部变量的空间又多出16byte,局部变量的空间到底是怎么分配的?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧