* question about allocating local variable @ 2004-06-28 15:27 Prawit Chaivong 2004-06-28 15:50 ` Eljay Love-Jensen 0 siblings, 1 reply; 7+ messages in thread From: Prawit Chaivong @ 2004-06-28 15:27 UTC (permalink / raw) To: gcc-help My question is... I wrote the program like this. void func() { char a[8]; } And then compile to asm code I've got this line of code. ..... subl $8 %esp ..... That makes sense, It moves stack pointer down 8 bytes for local variable. But the problem is, when I change size of array to 9 or 7 the asm code turn to this. .... subl $24 %esp .... It doesn't make any sense to me. Why it allocates 24 bytes for 9 or 7 bytes variable. Does anybody has any explaination? Thank in advance. Prawit C. __________________________________ Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers! http://promotions.yahoo.com/new_mail ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: question about allocating local variable 2004-06-28 15:27 question about allocating local variable Prawit Chaivong @ 2004-06-28 15:50 ` Eljay Love-Jensen 2004-06-28 16:32 ` Purnendu/Gmail 2004-06-29 3:14 ` Prawit Chaivong 0 siblings, 2 replies; 7+ messages in thread From: Eljay Love-Jensen @ 2004-06-28 15:50 UTC (permalink / raw) To: Prawit Chaivong, gcc-help Hi Prawit, >Does anybody has any explaination [why the compiler allocates more than specified]? Alignment. You didn't specify what platform, GCC version (3.3.4? 3.4.0?), and compile options you are using. If you are not generated optimized code, the code may not be optimized. It is also possible that one of the GCC Gnurus made a boo-boo. Rare, but can happen. Especially between optimizations that are in contention, which may have unintended side-effects on different platforms. (I discovered 3 such issues, on GCC 2.95 on Solaris. They're all fixed now.) HTH, --Eljay ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: question about allocating local variable 2004-06-28 15:50 ` Eljay Love-Jensen @ 2004-06-28 16:32 ` Purnendu/Gmail 2004-06-28 16:52 ` Eljay Love-Jensen 2004-06-28 17:36 ` llewelly 2004-06-29 3:14 ` Prawit Chaivong 1 sibling, 2 replies; 7+ messages in thread From: Purnendu/Gmail @ 2004-06-28 16:32 UTC (permalink / raw) To: Eljay Love-Jensen; +Cc: Prawit Chaivong, gcc-help On a solaris platform with gcc 3.0 the one i have out put for such a behaviour is pretty predictive. It allocates a stack of 120 for char a[1] to char a[8] then 128 for char a[9] to char a[16] and so on. for an integer array It allocates a stack of 120 for int a[1] and int a[2] then 128 for int a[3] to int a[4] and so on. with a allignment of 4 bytes =============== .file "help.c" .section ".text" .align 4 .global main .type main,#function .proc 04 main: !#PROLOGUE# 0 save %sp, -128, %sp !#PROLOGUE# 1 ret restore .LLfe1: .size main,.LLfe1-main .ident "GCC: (GNU) 3.0" ~ =============== Hope i am correct.am i? but then why the initial 120 bytes,??? On Mon, 28 Jun 2004 10:50:13 -0500, Eljay Love-Jensen <eljay@adobe.com> wrote: > > Hi Prawit, > > >Does anybody has any explaination [why the compiler allocates more than > specified]? > > Alignment. > > You didn't specify what platform, GCC version (3.3.4? 3.4.0?), and compile > options you are using. If you are not generated optimized code, the code > may not be optimized. > > It is also possible that one of the GCC Gnurus made a boo-boo. Rare, but > can happen. Especially between optimizations that are in contention, which > may have unintended side-effects on different platforms. (I discovered 3 > such issues, on GCC 2.95 on Solaris. They're all fixed now.) > > HTH, > --Eljay > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: question about allocating local variable 2004-06-28 16:32 ` Purnendu/Gmail @ 2004-06-28 16:52 ` Eljay Love-Jensen 2004-06-28 17:36 ` llewelly 1 sibling, 0 replies; 7+ messages in thread From: Eljay Love-Jensen @ 2004-06-28 16:52 UTC (permalink / raw) To: Purnendu/Gmail; +Cc: Prawit Chaivong, gcc-help Hi Pernendu, >but then why the initial 120 bytes,??? Probably has to do with compliance to SPARC ABI (http://www.sparc.com/standards/psABI3rd.pdf) specifications. --Eljay ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: question about allocating local variable 2004-06-28 16:32 ` Purnendu/Gmail 2004-06-28 16:52 ` Eljay Love-Jensen @ 2004-06-28 17:36 ` llewelly 1 sibling, 0 replies; 7+ messages in thread From: llewelly @ 2004-06-28 17:36 UTC (permalink / raw) To: Purnendu/Gmail; +Cc: Eljay Love-Jensen, Prawit Chaivong, gcc-help Purnendu/Gmail <purnendu@gmail.com> writes: > On a solaris platform with gcc 3.0 the one i have > out put for such a behaviour is pretty predictive. > > It allocates a stack of 120 for char a[1] to char a[8] > then 128 for char a[9] to char a[16] > and so on. > > for an integer array > It allocates a stack of 120 for int a[1] and int a[2] > then 128 for int a[3] to int a[4] > and so on. > > with a allignment of 4 bytes > > =============== > > .file "help.c" > .section ".text" > .align 4 > .global main > .type main,#function > .proc 04 > main: > !#PROLOGUE# 0 > save %sp, -128, %sp This isn't just for your array. Most of it is for saving the register stack. > !#PROLOGUE# 1 > ret > restore > .LLfe1: > .size main,.LLfe1-main > .ident "GCC: (GNU) 3.0" > ~ [snip] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: question about allocating local variable 2004-06-28 15:50 ` Eljay Love-Jensen 2004-06-28 16:32 ` Purnendu/Gmail @ 2004-06-29 3:14 ` Prawit Chaivong 2004-06-29 13:39 ` Eljay Love-Jensen 1 sibling, 1 reply; 7+ messages in thread From: Prawit Chaivong @ 2004-06-29 3:14 UTC (permalink / raw) To: Eljay Love-Jensen, gcc-help --- Eljay Love-Jensen <eljay@adobe.com> wrote: > Hi Prawit, > > >Does anybody has any explaination [why the > compiler allocates more than > specified]? > > Alignment. If we need char a[9] and the compiler allocated 12 bytes for me. That makes sense. But I'm wondering why I need 9 bytes but compiler allocated 24 bytes. I might misunderstand about alignment. And I will be appreciate if you could tell me why it gonna be that way. > > You didn't specify what platform, GCC version > (3.3.4? 3.4.0?), and compile > options you are using. If you are not generated > optimized code, the code > may not be optimized. > gcc 2.96 on x86 And asm code are the same no matter what you gonna optimized or not. > It is also possible that one of the GCC Gnurus made > a boo-boo. Rare, but > can happen. Especially between optimizations that > are in contention, which > may have unintended side-effects on different > platforms. (I discovered 3 > such issues, on GCC 2.95 on Solaris. They're all > fixed now.) > > HTH, > --Eljay > > __________________________________ Do you Yahoo!? Yahoo! Mail - 50x more storage than other providers! http://promotions.yahoo.com/new_mail ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: question about allocating local variable 2004-06-29 3:14 ` Prawit Chaivong @ 2004-06-29 13:39 ` Eljay Love-Jensen 0 siblings, 0 replies; 7+ messages in thread From: Eljay Love-Jensen @ 2004-06-29 13:39 UTC (permalink / raw) To: Prawit Chaivong, gcc-help Hi Prawit, >And I will be appreciate if you could tell me why it gonna be that way. I presume it is due to allocated space for register backing stores. Granted, in lovingly hand-crafted assembly, you may dispense with over reserved stack space through meticulous care. In this situation, GCC seems to over-allocate the stack beyond what it strictly needs (moreso than just alignment). Considering that the small routine I wrote is a leaf-node (doesn't call any other subroutines). >gcc 2.96 on x86 There is no "GCC 2.96" -- there's a Red Hat 2.96, which is a maverick / rogue release. Red Hat 2.96 is not supported in this forum; it may be supported by Red Hat. That being said, GCC 3.3.1 on Cygwin / WinNT has the same behavior. You may want to try the current releases of GCC, either GCC 3.3.4 or GCC 3.4.0. >And asm code are the same no matter what you gonna optimized or not. Okay, I've confirmed that with -O0 and -O3 on my platform. --Eljay ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2004-06-29 13:39 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2004-06-28 15:27 question about allocating local variable Prawit Chaivong 2004-06-28 15:50 ` Eljay Love-Jensen 2004-06-28 16:32 ` Purnendu/Gmail 2004-06-28 16:52 ` Eljay Love-Jensen 2004-06-28 17:36 ` llewelly 2004-06-29 3:14 ` Prawit Chaivong 2004-06-29 13:39 ` Eljay Love-Jensen
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).