472,331 Members | 1,953 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,331 software developers and data experts.

What is "Pointer Alignment"

I am wondering what it means when a pointer is aligned?

Could someone perhaps enlighten me or point me in the right direction?

Thank you in advance.

--
Sig
Thu Sep 18 12:21:07 EDT 2003

Nov 13 '05 #1
3 19955
signuts wrote:
I am wondering what it means when a pointer is aligned?


On some architectures, some data types can or should only be accessed
if their address is a multiple of 4 or the size of the datatype or
whatever. Otherwise the program crashes, or gives wrong results, or
maybe the pointer access just goes a lot slower.

For a type T, a pointer is aligned for T access if it contains an
address which is a multiple of whatever number T* pointers should be a
multiple of.

--
Hallvard
Nov 13 '05 #2
On Thu, 18 Sep 2003 12:22:33 -0400, signuts <ex****@triton.net> wrote:
I am wondering what it means when a pointer is aligned?

Could someone perhaps enlighten me or point me in the right direction?


In some systems, certain data types can only be stored such their addresses are
all on an even number boundary. In other systems, some data types require
addresses be on 4 octet boundaries.

If you had

char c;
char *Pc = &c;
int *Pi;

and you

Pi = (int *)Pc;

you might find that references to *Pi would cause errors because Pc didn't point
to a data item aligned on an "integer" boundary.

--
Lew Pitcher
IT Consultant, Enterprise Technology Solutions
Toronto Dominion Bank Financial Group

(Opinions expressed are my own, not my employers')
Nov 13 '05 #3
signuts <ex****@triton.net> wrote:
I am wondering what it means when a pointer is aligned?
Could someone perhaps enlighten me or point me in the right direction?


Since this isn't directly C related off-topicality warning:

<OT>
There are several architectures where e.g. an integer must start at
an even address (or addresses that can be divided by 4). This is
related to the machines commands for e.g. loading an int from memory
into the CPU: when an int gets loaded it's probably done using a
machine instruction that roughly translates to "load word from
memory address 0xc73204". If you try to load a "word" from an odd
address this machine instruction does not work and you get a bus
error.

But in C you can write code that looks like this (error checking
omitted):

int a;
unsigned char *buf = malloc( 128 );
a = * ( int * ) ( buf + 1 );

malloc() will always return memory that's properly aligned, i.e.
the address you get can be used for all kinds of types without
running into danger of getting a bus error. So buf will be an
even address. But when you now try to assign to 'a' in the way
it's done above, you try to load 'a' from an odd memory address
and then you're in trouble, at least on machines which require
proper alignment (on other machines this might only result in a
slower memory access). So the above (if it's really necessary)
must be written e.g. as

memcpy( &a, buf + 1, sizeof a );

because memcpy() has to be written in a way that won't use a
"load word" (or similar) instruction that could result in a
bus error.

BTW, this is also the reason why structures often need padding.
If you have a structure like

struct {
char c;
int a;
} my_struct;

the compiler will have to insert at least one extra byte between
'c' and 'a' because otherwise 'a' would end up at an odd address
and

my_struct.a = 0;

might lead to a bus error.
</OT>
Regards, Jens
--
_ _____ _____
| ||_ _||_ _| Je***********@physik.fu-berlin.de
_ | | | | | |
| |_| | | | | | http://www.physik.fu-berlin.de/~toerring
\___/ens|_|homs|_|oerring
Nov 13 '05 #4

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

14
by: J. Campbell | last post by:
I posted a question some time back about accessing a char array as an array of words. In order not to overrun the char array, I padded it with...
12
by: Markus.Elfring | last post by:
I am interested to know if the pointer value for the memory address can be changed by a compiler if the constness of the corresponding type is cast...
23
by: Ken Turkowski | last post by:
The construct (void*)(((long)ptr + 3) & ~3) worked well until now to enforce alignment of the pointer to long boundaries. However, now VC++ warns...
11
by: L. Chen | last post by:
The standard says that a char* or void* pointer has the least strict alignment. But I do not know what is a strict alignment. What does that mean?
188
by: infobahn | last post by:
printf("%p\n", (void *)0); /* UB, or not? Please explain your answer. */
5
by: mkaushik | last post by:
Hi everyone, Im just starting out with C++, and am curious to know how "delete <pointer>", knows about the number of memory locations to free....
0
by: tammygombez | last post by:
Hey everyone! I've been researching gaming laptops lately, and I must say, they can get pretty expensive. However, I've come across some great...
0
by: teenabhardwaj | last post by:
How would one discover a valid source for learning news, comfort, and help for engineering designs? Covering through piles of books takes a lot of...
0
by: Kemmylinns12 | last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
0
by: CD Tom | last post by:
This happens in runtime 2013 and 2016. When a report is run and then closed a toolbar shows up and the only way to get it to go away is to right...
0
by: CD Tom | last post by:
This only shows up in access runtime. When a user select a report from my report menu when they close the report they get a menu I've called Add-ins...
0
by: Naresh1 | last post by:
What is WebLogic Admin Training? WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
0
jalbright99669
by: jalbright99669 | last post by:
Am having a bit of a time with URL Rewrite. I need to incorporate http to https redirect with a reverse proxy. I have the URL Rewrite rules made...
0
by: antdb | last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine In the overall architecture, a new "hyper-convergence" concept was...
0
by: AndyPSV | last post by:
HOW CAN I CREATE AN AI with an .executable file that would suck all files in the folder and on my computerHOW CAN I CREATE AN AI with an .executable...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.