Re: is portable aliasing possible in C++?

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

 



>> msg *p = reinterpret_cast<msg*>(get_bytes());
>
> Why are you doing this?


For efficiency, by preventing a copy (imagine get_bytes() is getting bytes out of a socket buffer).  


Putting alignment/padding concerns aside, it would be nice if there was a way to explicitly tell the compiler, I want to do this and, please don’t reorder stores and loads, or perform other strict-aliasing optimizations, on the memory pointed to by this pointer (similar to the effect of a memcpy).  I believe the only way to do this is with the GCC may_alias attribute, or a more heavy-handed memory clobber.  I think the OP wanted to ask the GCC folks if there was another, possibly more portable, way; for example, placement new, but that turned out not to be an option. 

Another related, maybe more important, question is if GCC sees a reinterpet_cast like this (without a may_alias type), is it free to discard code or otherwise drastically change it due to the fact that it’s undefined by the standard?  Like some of the cases shown in:

“any undefined behavior in C gives license to the implementation (the compiler and runtime) to produce code that ... does completely unexpected things, or worse”

http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html

Jay Haynberg






[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