Re: Weird strict-aliasing break

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/30/2011 01:33 PM, Thibault Castel wrote:
>> ---------- Message transfÃrà ----------
>> From: Steffen Dettmer <steffen.dettmer@xxxxxxxxxxxxxx>
>> To: gcc-help@xxxxxxxxxxx
>> Date: Mon, 30 May 2011 13:59:51 +0200
>> Subject: Re: Weird strict-aliasing break
>> On Mon, May 30, 2011 Thibault Castel <thibault.castel@xxxxxxxxx> wrote:
>>> I have a weird warning when compiling my program with g++:
>>>   "dereferencing pointer âNAMEâ does break strict-aliasing rules"
>>>
>>> So, I tried to investigate a little bit and find some clues : I do a
>>> memory mapping from a char buffer to a C struct to have access to
>>> different datas into the buffer. Pretty casual. But, when I try to
>>> access one of my inner field, the warning triggers... Huh...
>>
>> Beside that this may have other disadvantages, such as depending
>> on byte order, padding and alighnment issues, in general you
>> cannot assume that constructions like:
>>
>> struct s {
>>   int a; // or int32_t
>> };
>> char buffer[];
>>
>> struct s *p = buffer;   p->a;
>> struct s *p = buffer+1; p->a;
>>
>> this even may crash (we had such problems on some ARM CPUs).
>>
> 
> Yes, we have some ARM CPUs as targets but specific code (with such
> aligment adaptations) are used. The code I provided is x86 targeted
> only ;)
> 
>> I think better here is using memcpy, but still "you have to know
>> what you are doing".
> 
> No, because I don't want to copy anything. I just need to access
> fields for reading and extracting data. I don't write into it. It's
> really just a memory mapping.

You're still better off with memcpy.  There's no loss of efficiency,
and it'll be legal C++.

Andrew.


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux