NDK開發中遇到的位元組對齊問題

2021-06-29 08:34:24 字數 361 閱讀 1719

最近花了幾天調出來ndk開發中的乙個bug,先看log日誌:

03-24 15:37:04.373: a/libc(21474): fatal signal 7 (sigbus) at 0x52d26f1a (code=1), thread 21474 (ample.speechapi)
在c++中用乙個float指標指向位址0x52d26f1a,一讀取就有sigbus異常。

在電腦上的x86 cpu架構可以通過讀前面四位元組後面四位元組,取出中間四位元組的float變數,但是在移動裝置上用的是arm架構,不支援在非四位元組對齊的位址上讀乙個float。

解決辦法:人工在0x52d26f1a前加兩個位元組的padding。

C struct 中位元組對齊問題

c struct 中位元組對齊問題 vc中下面幾個結構體大小分別是多少呢 struct mystruct struct mystruct pragma pack push 儲存對齊狀態 pragma pack 16 設定為16位元組對齊 struct test pragma pack pop 恢復對...

C中位元組對齊問題

好多筆試中,會考結構體的sizeof是多少,這就涉及到了位元組對齊問題。vc或gcc編譯器,預設按4位元組對齊 什麼叫位元組對齊?就是資料在記憶體中存放的方式,它存放的位址需要是它長度的整數倍。比如單位元組放在什麼位址都可以,雙位元組資料只能存放在偶位址上,4位元組數只能存放在是4的倍數的位址上。注...

程式設計中的位元組對齊問題

在沒有 pragma pack巨集的情況下,要遵守下面的三個原則 1 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小或者成員的子成員大小 只要該成員有子成員,比如說是陣列,結構體等 的整數倍...