【編譯製導指令】#pragma pack - 位元組數基準對齊
#pragma pack(1)
struct {
char c;
int i;
}S;
int main()
{
cout<<sizeof(S)<<endl;
}
那麼,結果為:
$ g++ main.cpp
$ ./a.exe
8
如果
#pragma pack(1)
struct {
char c;
int i;
}S;
這樣的結果為5
。
#pragma pack(2)
如果是這樣
#pragma pack(2)
struct {
char c;
int i;
}S;
那麼輸出結果為6
#pragma pack(3)
錯誤資訊
$ g++ main.cpp
main.cpp:5:16: 警告:對齊邊界必須是 2 的較小次方,而不是 3 [-Wpragmas]
#pragma pack(64)
^
#pragma pack(push,1)
與#pragma pack(1)
的區別
#pragma pack (n)
C編譯器將按照n個位元組對齊。 #pragma pack ()
取消自定義位元組對齊方式。 #pragma pack (push,1)
把原來對齊方式設定壓棧,並設新的1個位元組對齊 #pragma pack(pop)
恢復對齊狀態
例如:
#pragma pack(push) //儲存當前對齊狀態
#pragma pack(4) //設定為4位元組對齊
相當於
#pragma pack (push,4)
例子
#include <iostream>
using namespace std;
#pragma pack(1)
struct {
char c;
int i;
double d;
}S1;
#pragma pack() //與上面#pragma pack(4)對應
#pragma pack(4)
struct {
char c;
int i;
double d;
}S2;
#pragma pack()
#pragma pack(push,4)
struct {
char c;
int i;
double d;
}S3;
#pragma pack(pop)
int main()
{
cout<<sizeof(S1)<<endl;
cout<<sizeof(S2)<<endl;
cout<<sizeof(S3)<<endl;
}
結果為:
$ g++ main.cpp
$ ./a.exe
13
16
16
相關文章
- 1分鐘瞭解C語言正確使用位元組對齊及#pragma pack的方法C語言
- linux 改變GCC編譯器的位元組對齊方式LinuxGC編譯
- golang 位元組對齊Golang
- C++ 位元組對齊C++
- #pragma pack記憶體對齊的實現以及相關微軟面試題記憶體微軟面試題
- c/c++ 位元組對齊C++
- 【C/C++】5.位元組對齊和位元組填充C++
- iOS 記憶體位元組對齊iOS記憶體
- 【C++】C++的位元組對齊C++
- python反編譯之位元組碼Python編譯
- 位元組碼指令
- JWebAssembly:Java 位元組碼到 WebAssembly 編譯器WebJava編譯
- m基於BP譯碼演算法的LDPC編譯碼matlab誤位元速率模擬,對比不同的位元速率演算法編譯Matlab
- Needle:基於 DFA 的正規表示式庫,可編譯為 JVM 位元組碼編譯JVM
- Java位元組碼指令表Java
- HarmonyOS單模組編譯與原始碼導讀編譯原始碼
- 位元組碼基礎
- [譯] Hello, wasm-pack!ASM
- QT 出現 warning: unterminated #pragma pack (push, ...) at end of file 問題的解決方案QT
- Verilog 編譯指令簡介編譯
- Python字元與位元組新編Python字元
- Class檔案結構&位元組碼指令
- 位元組碼指令分析 ++i 和 i++
- JVM 模板直譯器之如何根據位元組碼生成彙編碼?JVM
- 【JVM原始碼解析】模板直譯器解釋執行Java位元組碼指令(上)JVM原始碼Java
- 大廠齊出海:位元組忙種草,網易愛社交
- 編碼、摘要和加密(一)——位元組編碼加密
- 深入淺出JVM(十)之位元組碼指令(下篇)JVM
- Linux核心模組編譯Linux編譯
- 淺談Kotlin語法篇之lambda編譯成位元組碼過程完全解析(七)Kotlin編譯
- 手撕Vue-編譯指令資料Vue編譯
- Bootstrap 4 實現導航欄右側對齊boot
- 位元組豆包、武大提出 CAL:透過視覺相關的 token 增強多模態對齊效果視覺
- 對預編譯的理解編譯
- php編譯引數PHP編譯
- Vue3原始碼分析——編譯模組和編譯器Vue原始碼編譯
- uboot-2012.04.01移植編譯前準備boot編譯
- 難對齊、難保障、難管理?一文了解位元組跳動如何解決資料SLA治理難題