你的需求和你的問題沒什麼關聯性。
你的目的相當於用C實現C++私有成員變數的功能。
就題目的問題來說,你可以用char[]來做記憶體佔位,補足另一個結構體的記憶體容量。在使用的時候透過強制型別轉換來訪問。
pack是對結構體記憶體對齊的一個設定。在計算結構體的大小的時候,需要用到。
記憶體對齊的概念,舉個例子
struct{
char a;
int b;
}
這個結構體的記憶體佔用通常不是5,而是8。int佔4位元組,char 不夠4位元組,因為4位元組對齊,佔用一個位元組,浪費3個位元組。pack就是告訴編譯器,記憶體要按照多少來對齊。
補一個例子
對於使用庫的人來說,只有一個不知道什麼結構的privte_var可以訪問,但是不知道具體到結構。
也可以反過來,先定義A,再用 PUBLIC_ZONE去截斷記憶體,類似於 int 強轉short int,但是最好使用malloc出來的堆記憶體。
總之,控制好記憶體想隱藏的方法有很多,可以透過函式定義到方式來隱藏,比如返回void*,只開放一部分API允許使用者獲取這個 void*內的部分資料,同樣可以達到限制使用者獲取其它資料的目的。
你的需求和你的問題沒什麼關聯性。
你的目的相當於用C實現C++私有成員變數的功能。
就題目的問題來說,你可以用char[]來做記憶體佔位,補足另一個結構體的記憶體容量。在使用的時候透過強制型別轉換來訪問。
pack是對結構體記憶體對齊的一個設定。在計算結構體的大小的時候,需要用到。
記憶體對齊的概念,舉個例子
struct{
char a;
int b;
}
這個結構體的記憶體佔用通常不是5,而是8。int佔4位元組,char 不夠4位元組,因為4位元組對齊,佔用一個位元組,浪費3個位元組。pack就是告訴編譯器,記憶體要按照多少來對齊。
補一個例子
對於使用庫的人來說,只有一個不知道什麼結構的privte_var可以訪問,但是不知道具體到結構。
也可以反過來,先定義A,再用 PUBLIC_ZONE去截斷記憶體,類似於 int 強轉short int,但是最好使用malloc出來的堆記憶體。
總之,控制好記憶體想隱藏的方法有很多,可以透過函式定義到方式來隱藏,比如返回void*,只開放一部分API允許使用者獲取這個 void*內的部分資料,同樣可以達到限制使用者獲取其它資料的目的。