最適化レベルが-o0の場合、次の2つのコードが正常に動作します。 しかし、最適化レベルが-o0以外の場合、最初のコードはある時点でクラッシュしますが、秒はクラッシュしません。理由を説明していただけますか?iOSの-o0以外の最適化レベルでクラッシュする
unsigned char* _pos = ...;
double result;
*((int*)&result) = *((int*)_pos;
unsigned char* _pos = ...;
double result;
int* curPos = (int*)_pos;
int* resultPos = (int*)&result;
*resultPos = *curPos;
EDIT: ところで、このコードは、インライン関数です。関数がインライン化されていない場合、最適化を行ってもクラッシュは発生しません。
デバッガを使用せずに自分自身を見つけてみませんか? :-) –
私は何もしませんでした - –
1と2の両方が厳密なエイリアシング規則を破りました。コンパイラは、クラッシュするコードを生成し、生成し、そのオプションでクラッシュしないコードを生成します。それについてはそれほど多くのことは言いません。 http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule –