基本資料型別所佔空間(unsigned無符號型別相同):
大小足夠容納最寬的成員;
大小能被其包含的所有基本資料型別的大小所整除。
(是被資料型別的大小:1,2,4,8,不是變數大小 )
方法:記憶體大小只取決於最大的成員
找到佔空間最大的成員,取最大的空間值x
當x無法被所有的資料型別大小所整除,就補加a,使得x+a可以被所有的資料型別大小所整除
則x+a為union的大小
例1:
union union1
;
union1取最大的變數,和其他變數無關
a-----------1
b-----------2
c-----------4
d-----------8
最大的是double=8,
8 mod 1=0
8 mod 2=0
8 mod 4=0
8 mod 8=0
所以union1的記憶體大小為8
例2
union union2
;
union2取最大的變數,和其他變數無關
a-----------13
b-----------2
c-----------8
最大的是a 13
13補3=16
16 mod 1=0
16 mod 2=0
16 mod 4=0
16 mod 8=0
所以union2的記憶體大小為16
結構體在記憶體中存放是按單元存放的,
所開闢單元的最大長度取決於佔位元組最大的資料型別,
儲存順序對空間的使用率有一定的影響。方法
先找最大的是資料型別大小x
在最大的變數之前,只要不超過最大變數的長度,就堆在一起成一行
每一行不是x的倍數,就補齊到最近的x的倍數
之後加和為總的大小
例1
struct tagphone1
;
tagphone1 記憶體狀態
a 型別大小1位元組,變數大小1位元組
bbbb 型別大小4位元組,變數大小4位元組
cc 型別大小2位元組,變數大小3位元組
只用看最大的型別:int
則最小單位為4位元組,每次開闢新的單元必須是4位元組的整數倍
開闢了三行
記憶體大小為 3*4 = 12
所以tagphone1 的大小為12
例2
struct tagphone2
;
tagphone2 記憶體狀態
acc 型別大小1位元組,變數大小1位元組
bbbb 型別大小4位元組,變數大小4位元組
只用看最大的型別:int
則最小單位為4位元組,每次開闢新的單元必須是4位元組的整數倍
開闢了2行
記憶體大小為 2*4 = 8
所以tagphone2的大小為8
例3
struct tagphone3
;
tagphone3 記憶體狀態
abbcccc
只用看最大的型別:char
所以tagphone3的大小為1+2+4=7
例4
struct tagphone4
;
tagphone4 記憶體狀態
aaaa
bbbbbbbb
ccccccccc
只用看最大的型別:double
需要成為8倍數
所以(4補4=8)+8+(9補7=16)=8+8+16=32
所以tagphone4的大小為32
C和C 中struct,class問題
在c c 中,struct結構體還是有所差別的,c中沒有class,c 中struct和class的區別就只有預設訪問許可權,預設繼承許可權.1.c 中,class和struct的區別 1.成員訪問許可權 class的成員訪問許可權為private,而struct的成員訪問許可權為public 2....
struct class和STL的統一記憶體管理
利用c 的new和delete操作符過載特性,可以對自定義的struct和class進行統一記憶體管理,再加上stl allocator的開放特性,便可以將stl容器物件的記憶體管理併入struct和class的記憶體管理,進而將這三者的記憶體管理統一。首先實現自定義的記憶體管理演算法框架,開放介面...
C 學習 原創 unique和uni
c 學習 原創 unique和unique copy函式的應用 孫宇洪 unique函式的功能是 去除相鄰的重複元素 只保留乙個 函式引數 unique first,last,compare first為容器的首迭代器,last為容器的末迭代器,compare為比較函式 可略寫 注意 unique函...