C 的struct型別的記憶體問題

2021-06-16 11:41:56 字數 609 閱讀 6988

在用struct定義乙個結構體的時候,突發想象:struct變數中的不同型別是怎麼樣分配記憶體的?

於是,用vc做了個小實驗

struct中定義了char、int、float等型別資料

先來看看只有乙個char型別資料,乙個int型別資料,乙個float型別資料,乙個double型別資料的struct型別

struct structure1 ;

#include using namespace std;

//typedef struct structure1 struction;

int main() ;

#include using namespace std;

int main() {

struct structure1 s1, s2;

int size = sizeof s1;

cout<

可以看出雖然c2、c3並不是和c1在一起定義的,但是分配記憶體的時候還是沒有另外分配四個位元組,而是利用c1後面沒有分配完位元組給c2、c3

這裡只是簡單討論了char型,當然大家還可以去思考其他諸如class等複雜的型別並驗證

STRUCT的記憶體

在c語言中,結構體的記憶體是由先到後順序占用空間的。先定義的在低位址,後定義的在高位址。位址採用空間對其策略。其實這是一篇問題貼,一直沒有弄懂是什麼問題!在結構體內存中 結構體首元素位址和結構體首位址一致。c 不一致 c 中,一般會空出開始的4位元組,為了區別物件位址,和第乙個成員的位址。通常是1位...

關於struct的記憶體對齊問題

2.結構體對齊 結構體中佔位元組最多的成員叫邊界成員,整個結構體所用空間必須是邊界成員所佔位元組的整數倍。3.編譯器的對齊指令 通常不需要我們考慮對齊方式問題,編譯器會自動選擇合適的策略,但也可以通過命令設定 pragma pack n 可以設定變數以n位元組方式對齊。n位元組對齊有兩種情況 第一 ...

結構體struct 的記憶體對齊問題(c語言)

對齊原因 1 為了避免移植後計算機讀取資料出錯 各個硬體平台對儲存空間的處理上有很大的不同,某些硬體平台只能在某些位址處去某些特定型別的資料,否則會出錯 2 為了提高計算機取數的效率 比如有些平台每次讀都是從偶位址開始,如果乙個int型 32位系統 如果放在偶數字址開始的地方,那麼一乙個讀週期就可以...