Hi, Following code:
1: int main() 2: { 3: char Buff[3]; 4: *((short*)(Buff+1)) = 0xFFFF; 5: }
4: *((short*)(Buff+1)) = 0xFFFF; 0x0008011C 4904 LDR R1,[PC,#0x0010] 0x0008011E 2001 MOV R0,#0x01 0x00080120 4468 ADD R0,SP 0x00080122 8001 STRH R1,[R0,#0x00]
"With other compilers on other platforms (Borland and I386 for example) such a problem doesn't appear." What is the extent of the testing on which you base this statement? "The x86 architecture has hardware support for un-aligned accesses." So, even though it "works", the hardware has to jump through hoops and the performance will be degraded. So this technique loses you both performance and portability. Thus, the "conventional" method described by Dan may not be as "unattractive" as it appears at first sight...!