回覆列表
  • 1 # 使用者6437288002227

    你的需求和你的問題沒什麼關聯性。

    你的目的相當於用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*內的部分資料,同樣可以達到限制使用者獲取其它資料的目的。

  • 中秋節和大豐收的關聯?
  • 六月黃該怎麼吃?