Re: stack allocation and gcc

Ihar 'Philips' Filipau
2004-03-10T14:25:51Z

Jaco Kroon wrote:
> Hi Ihar,
>
> In your code you have 3 buffers, one in the mani branch of 32 bytes and
> one of 32 bytes in each of the sub branches. This adds up to a total of
> 64 bytes since as you say, the two buffers named buf2[32] can be
> shared. Thus it is 32 bytes for buf and 32 bytes for the shared
> buffer. Now if you look at the function startup code:
>
> 0: 55 push %ebp
> 1: 89 e5 mov %esp,%ebp
> 3: 83 ec 68 sub $0x68,%esp
>
> THe push saves the frame pointer (ebp). The mov sets up the new stack
> frame and the sub allocates space of 68 bytes on the stack, 4 bytes more
> than the expected 64, this is probably for temporary storage required
> somewhere in the function. As such, gcc does not allocate 32 bytes too
> many (at least not on i386, but probably not on other architectures
> either).
>
> Jaco
>

0x68 != 68.

[ All known to me assemblers on ix86 use hexadecimal number by
default. I was sort of surprised to find out that ppc gas uses decimal
numbers only. ]

0x68 == 104 == 32*3 + 4 + 4.

As I have said, keep adding to function 'do { char buf[32];
printf(buf); } while(0)' increse this number. As in my logic it is
supposed to be unchanged - all renundant buffers do have same size - 32
bytes.