簡體   English   中英

調用堆棧顯示SIGBUS,這是什么意思

[英]call stack shows SIGBUS, what does that mean

我的調用堆棧顯示以下內容:

 --- called from signal handler with signal 10 (SIGBUS) ---
 001301b8 allocate__t24__default_alloc_template2b0i0Ui (20, 20, 309940, 36, fc55
1a00, 0) + a4
 0011dcb8 __nw__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0_3RepUiUi (10, 10, 7773e8, 0, 0, 0) + 14
 0011dcf8 create__Q2t12basic_string3ZcZt18string_char_traits1ZcZt24__default_all
oc_template2b0i0_3RepUi (a, a, 7773e8, a, 0, 0) + 24
 0011e0bc replace__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_allo
c_template2b0i0UiUiPCcUi (fbcff5c0, 0, ffffffff, fcbf55e2, a, 80808080) + 114
 00133ef0 assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0PCcUi (fbcff5c0, fcbf55e2, a, ffffffff, ffffffff, 20) + 24
 00132c78 assign__t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc
_template2b0i0PCc (fbcff5c0, fcbf55e2, 15b0, 15d0, 16f0, 0) + 24
 0012f970 __t12basic_string3ZcZt18string_char_traits1ZcZt24__default_alloc_templ
ate2b0i0PCc (fbcff5c0, fcbf55e2, fcbf55d8, fbcff70e, 10, e00) + 28
 001f7e0c getFiles__7ListDirb (fbcff8e4, 0, 241000, 0, 4e61a0, ff11f478) + 144
. . .

這是否意味着分配失敗意味着已占用太多內存? 在這種情況下,如何檢查/監視內存使用量的增長和縮小,以找出問題出在哪里? 我是否可以覆蓋allocate__t24__default_alloc_template2b0i0Ui__default_alloc_template<false, 0>::allocate(unsigned int)以便它調用自定義分配調用?

調用堆棧顯示SIGBUS,這是什么意思

顯示調用棧的頂部可能會有所幫助,以便我們檢查指針的對齊方式。 了解導致SIGBUS的平台和指令也將有所幫助。

根據我的經驗, SIGBUS通常與未對齊的數據有關。 在下兔子洞之前,請嘗試將-xmemalign=4i-xmemalign=8iCFLAGSCXXFLAGS

我似乎記得Sparc的一條指令可以在更廣泛的數據上更有效地運行,但對對齊非常敏感。 如果將uint8_t*轉換為uint32_t*uint64_t* ,則該緩沖區確實需要對齊,因為默認情況下SunCC會生成更有效的移動。 這是安德烈所說的嚴格混疊違規。 Sun不像x86,如果您作弊,它也將成為SIGBUS

另請參見Sun手冊中的B.2.111 -xmemalign = ab Google“ -xmemalign = 4i”也很受歡迎 麻煩的是,直到您忍受了問題並找到根底,您才不知道這就是您要尋找的東西。

(我花了幾個月的時間在一次自檢中在Sparc上追趕一個崩潰,這是由於不正確的演員表和更寬的移動指令所致。- -xmemalign=4i為我修復了它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM