On Aug 29, 2013, at 3:26 PM, Hadley Wickham wrote:

>>> Do pointers always have to be aligned?
>> 
>> Depends on the architecture, e.g., Sparc doesn't allow non-aligned pointers 
>> at all (results in a segfault), SV x86_64 ABI specifies pointers to be 
>> aligned at 8 bytes, but the x86_64 CPUs will allow misaligned pointers with 
>> a performance penalty (the same was true for x86 - i.e. misaligned pointers 
>> are tolerated with a penalty).
> 
> Ok, so you might not have to align pointers a particular architecture,
> but if you're writing code that you want to work across multiple
> architectures you must.
> 

Yes. In many cases the compiler does that for you (e.g. inside structs), but if 
you are constructing binary objects that will be loaded into memory directly 
and then accessed then, yes, you have to take that into account. Note that the 
alignment requirements are not just for pointers but for all types, e.g., Sparc 
also segfaults if you don't align doubles on 8-byte boundary.

It is also a good idea to have alignment in mind when designing structs, e.g.:

struct a {
    char flag;
    char *name;
    char active;
    char *description;
    int  len;
};

takes 40 bytes on 64-bit machine, while just re-ordering the members to

struct b {
    char *name;
    char *description;
    char flag;
    char active;
    int  len;
};

takes 24 bytes.

Cheers,
Simon


> Hadley
> 
> -- 
> Chief Scientist, RStudio
> http://had.co.nz/
> 
> 

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to