第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

gcc,嚴(yán)格混疊和恐怖故事

gcc,嚴(yán)格混疊和恐怖故事

C
繁花不似錦 2019-11-26 15:12:38
在gcc-strict-aliasing-and-casting-of-of-union中,我問(wèn)是否有人遇到過(guò)通過(guò)指針進(jìn)行聯(lián)合修剪的問(wèn)題。到目前為止,答案似乎是否定的。這個(gè)問(wèn)題是廣泛的:你有任何關(guān)于gcc和嚴(yán)格走樣恐怖故事?背景:引用c99-strict-aliasing-rules-in-c-gcc中AndreyT的答案:“嚴(yán)格的別名規(guī)則植根于自[標(biāo)準(zhǔn)化]時(shí)代以來(lái)C和C ++中存在的標(biāo)準(zhǔn)部分。C89/ 90(6.3中存在禁止通過(guò)一種類(lèi)型的左值訪問(wèn)一種類(lèi)型的對(duì)象的子句。 )以及C ++ 98(3.10 / 15)。...并非所有編譯器都希望(或膽敢)強(qiáng)制執(zhí)行或依賴它?!焙冒?,海灣合作委員會(huì)現(xiàn)在敢于這樣做,它的-fstrict-aliasing開(kāi)關(guān)。這就造成了一些問(wèn)題。參見(jiàn),例如,關(guān)于Mysql錯(cuò)誤的出色文章 http://davmac.wordpress.com/2009/10/,以及在http://cellperformance.beyond3d.com/articles/2006/06/understanding上同樣出色的討論-strict-aliasing.html。其他一些不相關(guān)的鏈接:Fno嚴(yán)格混疊的性能影響嚴(yán)格混疊什么時(shí)候可以對(duì)嚴(yán)格的指針別名進(jìn)行安全處理如何在編譯時(shí)檢測(cè)嚴(yán)格的混疊重復(fù)一遍,您是否有自己的恐怖故事?當(dāng)然,沒(méi)有指出的問(wèn)題-Wstrict-aliasing將是更可取的。也歡迎其他C編譯器。新增6月2日:在第一個(gè)環(huán)節(jié)邁克爾·伯爾的答案,這也的確是有資格作為一個(gè)恐怖故事,也許是(2003年)有點(diǎn)過(guò)時(shí)。我做了一個(gè)快速測(cè)試,但是問(wèn)題顯然已經(jīng)消失了。資源:#include <string.h>struct iw_event {               /* dummy! */    int len;};char *iwe_stream_add_event(    char *stream,               /* Stream of events */    char *ends,                 /* End of stream */    struct iw_event *iwe,       /* Payload */    int event_len)              /* Real size of payload */{    /* Check if it's possible */    if ((stream + event_len) < ends) {            iwe->len = event_len;            memcpy(stream, (char *) iwe, event_len);            stream += event_len;    }    return stream;}具體投訴是:一些用戶抱怨說(shuō),如果在沒(méi)有-fno-strict-aliasing的情況下編譯[以上]代碼,則寫(xiě)入和memcpy的順序會(huì)顛倒(這意味著將假len復(fù)制到流中)。編譯后的代碼,在CYGWIN wih -O3上使用gcc 4.3.4(如果我輸入錯(cuò)了,請(qǐng)更正我-我的匯編器有點(diǎn)生銹?。篲iwe_stream_add_event:        pushl       %ebp        movl        %esp, %ebp        pushl       %ebx        subl        $20, %esp        movl        8(%ebp), %eax       # stream    --> %eax        movl        20(%ebp), %edx      # event_len --> %edx        leal        (%eax,%edx), %ebx   # sum       --> %ebx        cmpl        12(%ebp), %ebx      # compare sum with ends對(duì)于邁克爾回答中的第二個(gè)鏈接,*(unsigned short *)&a = 4;gcc通常會(huì)(總是?)發(fā)出警告。但我相信對(duì)此(對(duì)于gcc)的有效解決方案是使用:#define CAST(type, x) (((union {typeof(x) src; type dst;}*)&(x))->dst)// ...CAST(unsigned short, a) = 4;我問(wèn)過(guò)在gcc-strict-aliasing-and-casting-a-union中這是否可以,但是到目前為止,沒(méi)有人不同意。
查看完整描述

3 回答

?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

SWIG生成的代碼依賴于嚴(yán)格的別名關(guān)閉,這可能會(huì)導(dǎo)致各種問(wèn)題。


SWIGEXPORT jlong JNICALL Java_com_mylibJNI_make_1mystruct_1_1SWIG_12(

       JNIEnv *jenv, jclass jcls, jint jarg1, jint jarg2) {

  jlong jresult = 0 ;

  int arg1 ;

  int arg2 ;

  my_struct_t *result = 0 ;


  (void)jenv;

  (void)jcls;

  arg1 = (int)jarg1; 

  arg2 = (int)jarg2; 

  result = (my_struct_t *)make_my_struct(arg1,arg2);

  *(my_struct_t **)&jresult = result;              /* <<<< horror*/

  return jresult;

}


查看完整回答
反對(duì) 回復(fù) 2019-11-26
  • 3 回答
  • 0 關(guān)注
  • 549 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)