Thread Closed

Alignment of Stack

 
Share Thread Thread Tools
Dec16-07, 04:02 AM   #1
 

Alignment of Stack


What is alignment of a stack? And why is it important to align a stack when working on an x86 processor?
PhysOrg.com
PhysOrg
science news on PhysOrg.com

>> King Richard III found in 'untidy lozenge-shaped grave'
>> Google Drive sports new view and scan enhancements
>> Researcher admits mistakes in stem cell study
Dec16-07, 12:24 PM   #2
 
Can you be more specific in what context you're asking about this?

Anyway see here:

On the Pentium and subsequent x86 processors, there is a substantial performance penalty if double-precision variables [that is, high-precision floating point numbers] are not stored 8-byte aligned [that is, at an address a such that ((int)a)%8 == 0)]; a factor of two or more is not unusual. Unfortunately, the stack (the place that local variables and subroutine arguments live) is not guaranteed by the Intel ABI to be 8-byte aligned.

Recent versions of gcc (as well as most other compilers, we are told, such as Intel's, Metrowerks', and Microsoft's) are able to keep the stack 8-byte aligned; gcc does this by default (see -mpreferred-stack-boundary in the gcc documentation). If you are not certain whether your compiler maintains stack alignment by default, it is a good idea to make sure.
Dec17-07, 12:40 AM   #3
 
I had googled for the same yesterday and found the link but I didnt understand why that happens... anyways, i am attaching the piece of code the i found initially.... the file was supposed to be align.h but i dont know if the messageboard would accept upload of formats other than the given ones....
Attached Files
File Type: pdf Align.pdf (18.0 KB, 7 views)
Dec18-07, 01:26 AM   #4
 
Recognitions:
Homework Helper Homework Help

Alignment of Stack


Alignment of data in memory is to make sure that data is meaningfully "aligned" in the memory, because when the CPU fetches data, it doesn't fetch one bit or one byte, it fetches a few bytes, maybe 2, 4, 8, or 16 depending on your CPU. If one of your variables you want to perform an operation on is in two "segments", your CPU will then for example need to fetch twice.

In fact it's usually important on any processor. In some processors it's not only recommended to keep the stack aligned, it's required.

I suppose the stack is more "special" in the fact that it is only created at runtime instead of being preallocated. You can read more about its significance in Wikipedia under 'data structure alignment'.
Dec18-07, 09:24 AM   #5
 
Recognitions:
Gold Membership Gold Member
Science Advisor Science Advisor
Its not necessarily the alignment of the stack itself, but the address of each variable stored on the stack that the header file deals with.

Addresses in memory are odd, even, or are "aligned" meaning the address divides with no remainder, on different boundaries. Those boundaries can be 2 (bytes), 4, 8, 16... page.
A page is defined by the system but could be 4096 bytes - for example.

In some systems accessing a variable with a non-aligned address can cause a fatal bus error, result in bad performance, or interfere with caching memory.
Thread Closed
Thread Tools


Similar Threads for: Alignment of Stack
Thread Forum Replies
Work required to stack books Introductory Physics Homework 14
How is stacking accomplished and Why do we stack data? General Physics 1
Velocity stack Mechanical Engineering 4
A stack of books (conflicting answers) Introductory Physics Homework 1
Cooling Stack Shape Computing & Technology 3