Re: Simple allocation of two buffer on AMD64
- From: jacob navia <jacob@xxxxxxxxxx>
- Date: Fri, 02 Nov 2007 00:43:31 +0100
jimenezrick@xxxxxxxxx wrote:
- Code compiled by GCC:
int main(void)
{
char a[] = "123";
char b[] = "abc";
printf("%p %p\n", a, b);
return 0;
}
- Running it on AMD64 gives me:
0x7fff929c9410 0x7fff929c9400
- What is the reason for 16 bytes of distance between two address and
not just 8 bytes?
The stack MUST be aligned to an 8 byte boundary in
64 bits AMD/Intel. If that fails, each access provokes
a misaligned read, what makes performance take a
big hit.
Access to XMM registers in most cases MUST be aligned to a
16 byte boundary. If not, you can't load the 16 byte
XMM registers quickly.
Some compilers decide that performance is better than
wasting memory in the alignment, and align all variables
in the stack to a 16 byte boundary even when it is not
needed, as in your example.
Other compilers will say that performance by loading the XMM
registers is lost when the cache hits go down because the
program uses more memory and will NOT align to a 16 byte
boundary but only to a 8 byte boundary what is bad enough.
--
jacob navia
jacob at jacob point remcomp point fr
logiciels/informatique
http://www.cs.virginia.edu/~lcc-win32
.
- Follow-Ups:
- Re: Simple allocation of two buffer on AMD64
- From: CBFalconer
- Re: Simple allocation of two buffer on AMD64
- References:
- Simple allocation of two buffer on AMD64
- From: jimenezrick
- Simple allocation of two buffer on AMD64
- Prev by Date: Re: A Trend Towards Lower Software Maintenance Budgets?
- Next by Date: Re: how can we check to not enter the any string or char?
- Previous by thread: Re: Simple allocation of two buffer on AMD64
- Next by thread: Re: Simple allocation of two buffer on AMD64
- Index(es):