2011-12-03 96 views
0

我正在寻找一些针对x86(32位)平台和VxWorks 6.8的优化汇编代码。我有五个局部变量(除了三个传递的参数),这五个变量的输入如下:char[200], char*, int, int, fd_set。三个传递的变量键入为int, int, bool。因为它的堆栈五个当地人,这似乎是太多关于分配4348个字节VxWorks堆栈帧异常大

push ebp 
mov ebp,esp 
push edi 
push esi 
push ebx 
sub esp,0x10fc 

我很好奇的是最后一行:当我看拆卸,创建堆栈帧空间。另外:第二个本地(char*)用于遍历第一个本地(char[200])中的每个字节。任何洞察为什么这么多的空间分配将不胜感激。

+2

'fd_set'包含一个'SOCKET'类型的数组,可能有'FD_SETSIZE'(可能是64?)成员...所以我会怀疑这个大小不是来自'char []'。 .. – Yahia

回答

1

fd_set通常包含1024位或128字节。

很有可能您将fd_set按价值传递给其他某些功能,从而在流程中创建未命名的临时对象。

您可以使用-fdump-tree-all编译源代码并检查生成的输出文件。您应该能够看到GCC创建的所有临时对象。