Hello all,
I have a general programming question. Me and my co-workers had an
discussion about data alignment and non-aligned accesses. Please
consider the following situation where an un-aligned access was made
resulting in wrong value.
char buf[5] = {1,2,3,4,5};
unsigned short tmp;
tmp = *(unsigned short*)&buf[1]; /* &buf[1] is on a odd address
My co-workers expected that tmp will contain the value0x0203, but the
value was 0x02. I understand that, because ARM7 core does not support
un-aligned accesses and the compiler was forced to use a word access on
a odd address. This code was ported from an 8-bit machine where it was,
off course, working. My question is if all 32-bit devices would have the
same problem with this code and why when we tested the same situation on
a PC using Borland Builder compiler it was working as my co-workers
expected. Is this a CPU(+cpu bus) issue or it is also compiler dependent.
Although I thing this is bad programming practice and it calls for
errors I am asking if it is possible to enable a warning for such
situations.
Regards,
MarkoMessage
Un-aligned data access on ARM7 core
2005-12-16 by Marko Panger
Attachments
- No local attachments were found for this message.