[ale] linux byte alignment

stephen stephen at phynp6.phy-astr.gsu.edu
Mon Jul 29 19:32:48 EDT 2002


On Mon, Jul 29, 2002 at 07:29:11PM -0400, stephen wrote:
> On Mon, Jul 29, 2002 at 03:26:09PM -0400, Benjamin Dixon wrote:
> > 
> > Hi all,
> > 
> > I'm trying to pry into linux byte alignment issues and assembly and I ran
> > across something I haven't figured out. My understanding is that alignment
> > is at one word (4 bytes) so I have the following function:
> > 
> > int main()
> > {
> >    char x[10];
> >    char y[5];
> > }
> > 
> > By my calculation, if the memory has to be alignment, x[10] will take up
> > 12 bytes (ceiling of 2.5 words = 3, 3x4-bytes = 12). And likewise, the
> > y[5] will take up 8 bytes. So there's 20 bytes of excess memory laying
> > around? But when I run the program through gcc with the -S option, I get
> > the following:
> > 
> > ...
> > main:
> >         pushl %ebp
> >         movl %esp,%ebp
> >         subl $40,%esp
> > .L2:
> >         movl %ebp,%esp
> >         popl %ebp
> >         ret
> > .Lfe1:
> > ...
> > 
> > The question is, what's that 40? If I use different numbers for the array
> > sizes, I get a different number there, always divisible by 4 but always
> > greater than the number I expect. Anyone know why?
> 
> I'm not sure why the compiler produces this, but if you disassemble the
> the binary then you should see the expected 20 bytes for x and y plus room
> for the frame pointer and return address.  This is a snippet of what I got
> from 'objdump -d':
> 
> [snip]
> 080483a4 <main>:
>  80483a4:	55                   	push   %ebp
>  80483a5:	89 e5                	mov    %esp,%ebp
>  80483a7:	83 ec 28             	sub    $0x28,%esp
                                                ^^
EEEKKK...nevermind me.  It's been a long day.

stephen

---
This message has been sent through the ALE general discussion list.
See http://www.ale.org/mailing-lists.shtml for more info. Problems should be 
sent to listmaster at ale dot org.






More information about the Ale mailing list