GCC O2編譯的bug

來源:互聯網
上載者:User

最近對以前寫的tcp網路程式庫做輸送量測試,gcc O1編譯,運行效果很好,可以達到900MiB/s。

但是問題來了,當我用gcc O2選項編譯網路程式庫,程式一啟動就core掉。

查看coredump檔案,原因大概如下:

掛在g_pool.DoSomething();

但是在DoSomething()裡, this != &g_pool;

非常詭異。

我對自己的程式還是很有信心,不會有stack或者heap溢出錯亂:

不使用靜態數組,只用容器;

只new但不delete,資源交給 UniquePtr   SharedPtr管理。

google之,有老外說O2的sibling-call最佳化有bug,禁用掉就可以。我試了一下,還是core掉。

於是開始用最笨的辦法,比較O1和O2的區別,一個一個的加編譯選項,看是哪個導致了core

最終發現了-fgcse,只要在-O2後面加上-fno-gcse,程式就好了

這個選項的具體含義不清楚,也沒興趣瞭解,反感linux。

其實是很想測windows下的輸送量,我比較迷信IOCP。

無奈沒有windows伺服器,個人PC效能太差。

結果就發現了gcc編譯最佳化的這個問題。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.