VxWorks堆栈帧异常大

时间:2011-12-03 17:56:06

标签: c assembly x86 vxworks

我正在研究一些针对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])中的每个字节。任何洞察为什么分配这么多空间的人都会非常感激。

1 个答案:

答案 0 :(得分:1)

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

您有可能通过值fd_set传递给其他一些函数,在此过程中创建未命名的临时值。

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