C學習筆記8 結構體內存分配

2021-05-24 22:45:25 字數 930 閱讀 5691

結構體的記憶體分配,就是找到能被成員變數型別長度n整出的位址值來儲存,下乙個成員變數也這樣,中間的空位補0. 最後整個結構體的長度 也是最大n的整數倍 後面多的也補零

struct a

;sizeof( a ) = __________

struct b

;sizeof( b ) = __________

struct c

sizeof( c ) = __________

sizeof(a)=8;

i存在前面 占用4個位元組 然後char 因為占用位元組數是1,所以整除1的位址直接往後面就行了 ,這樣已經占用了5個自己 然後總的占用空間是他的最小整數倍 4*2=8;

struct c

sizeof( c ) = __________

這個我有了一點頭緒 就是 虛函式不管有多少個 他們不佔空間 系統會分配乙個虛函式表 然後乙個指標指向這個函式表 所以這個指標會占用4位元組的空間 所以這個題是4

也 懂了 如果把結構體改為空的 或者夾n多普通的函式 值都為1 他就是說普通函式是不佔空間的 但是 分配乙個結構體 不管他有沒有成員 都會占用1個位元組

c++中 結構體和類基本沒有區別 區別就在於 類得成員預設是private 結構體預設是public

typedef unsigned char byte;

union a

b;byte c;

};a a;

a.c = 218; // 11011010

cout << ( int )a.b.b2 << endl;

這道題 因為共用體是共享乙個儲存區 給變數a賦值 218 二進位制儲存就是11011010 正好填滿了這個共用體的空間 8位

然後我通過改變不同的值 發現了他是把11011010 按低位到高位的順序存的

所以b1 10 b2 110 b3 110 也就是b2=6

C語言結構體內存分配問題

首先需要明白結構體內存對齊的好處 提高訪問效率。但是會造成一定的空間浪費。c語言結構體服從以下原則 1.記憶體對齊 1.結構體大小必須是結構體占用最大位元組數成員的整數倍,這樣在處理陣列時可以保證每一項都邊界對齊 2.結構體的每乙個成員起始位址必須是自身型別大小的整數倍 3.位元組對齊取決於編譯器,...

《複習》指標結構體內存分配

一.指標 指標的重要性 指標是c語言的靈魂 定義位址 記憶體單元的編號 從0開始的非負整數 範圍 0 ffffffff 指標指標就是位址,位址就是指標 指標變數是存放在記憶體單元位址的變數 指標的本質是乙個操作受限的非負整數 分類1.基本型別的指標 p i p和i等價 修改 p和i都能改變記憶體上儲...

結構體內存分配 舉例待續

定義結構體型別,系統不為之分配記憶體單元。當使用結構體型別定義變數時,才開闢記憶體單元。結構體在記憶體中所佔的大小決定於兩點 1.編譯器預設或指定對齊數 eg 64為ubuntu14.04 預設8 這個可通過 pragma pack n 來指定 2.每個成員 實際有效對齊數,指的是所有成員中所佔位元...