我正在研究一些针对x86(32位)平台和VxWorks 6.8的优化汇编代码。我有五个局部变量(除了三个传递的参数),这五个变量的输入如下:char[200], char*, int, int, fd_set
。传递的三个变量的类型为int, int, bool
。当我查看反汇编时,堆栈框架创建为:
push ebp
mov ebp,esp
push edi
push esi
push ebx
sub esp,0x10fc
我最感兴趣的是最后一行,因为它为五个本地人在堆栈上分配了4348个字节,这似乎是太多的空间。另外:第二个本地(char*
)用于遍历第一个本地(char[200]
)中的每个字节。任何洞察为什么分配这么多空间的人都会非常感激。
答案 0 :(得分:1)
fd_set
通常包含1024位或128字节。
您有可能通过值fd_set
传递给其他一些函数,在此过程中创建未命名的临时值。
您可以使用-fdump-tree-all
编译源代码,并检查生成的输出文件。您应该能够看到GCC创建的所有临时工具。