[英]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=8i
到CFLAGS
和CXXFLAGS
。
我似乎記得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.