如何使用偽指令讓結構體占用的記憶體空間變小

2021-06-05 22:30:21 字數 347 閱讀 5132

在我們定義乙個結構體後,因為存在位元組對齊的緣故,所以會有資源浪費的情況,比如

typedef struct

student_t;

因為位元組對齊的緣故,這樣這個結構體的變數會佔12個位元組的空間,雖然***變數是乙個char型,但還是會按int型的空間處理

,為了解決這個問題,我們可以將這個結構體的定義放在兩行**中間:

#pragma pack (1)//使用偽指令c編譯器將按照1個位元組對齊

typedef struct

student_t;

#pragma pack ()//使用偽指令取消自定義位元組對齊

這樣定義的結構體變數佔的空間會變成9個位元組。

結構體的記憶體空間分配原理

關於記憶體對齊 一 1.什麼是記憶體對齊 假設我們同時宣告兩個變數 char a short b 用 取位址符號 觀察變數a,如果a的位址是0x0000,那麼b的位址將會是0x0002或者是0x0004。那麼就出現這樣乙個問題 0x0001這個位址沒有被使用,那它幹什麼去了?答案就是它確實沒被使用。...

結構體的記憶體空間分配原理

關於記憶體對齊 一 1.什麼是記憶體對齊 假設我們同時宣告兩個變數 char a short b 用 取位址符號 觀察變數a,如果a的位址是0x0000,那麼b的位址將會是0x0002或者是0x0004。因為cpu每次都是從以2位元組 16位cpu 或是4位元組 32位cpu 的整數倍的記憶體位址中...

VC中struct結構占用的記憶體空間數

一直以來對struct型別的長度如何計算不甚清楚,以前也看過一些資料,但都講的不很清楚。今天終於發現了一篇講解的很清楚的文章。來自csdn。本文主要包括二個部分,第一部分重點介紹在vc中,怎麼樣採用sizeof來求結構的大小,以及容易出現的問題,並給出解決問題的方法,第二部分總結出vc中sizeof...