2013-04-02 97 views
1

我一直在尋找,我沒有找到任何有價值的東西,所以我在這裏問。在共享內存中存儲結構是否是一種好的做法?

將結構直接保存在C中的共享內存中是否是一種好的做法?我的意思是,像這樣:

typedef struct { 
    ... 
} foo; 

int id = shmget(sizeof(foo), ...); 
foo* bar = (foo*) shmat(id, ...); 

或者是如果我要存儲一個複雜的結構能夠更好地分配陣列和存儲有隻有你所需要的領域,例如

#define SHM_FIELD_A(shm) (*(shm)) 
#define SHM_FIELD_B(shm) (*(shm) + 1) 

(帶雙打,字符,不同大小的數據),使用結構可能會更好。但是,如果我只想存儲整數,哪個更好?

+1

一般來說這一切都取決於您的要求。 –

+0

如果您將所有數據傳遞給另一個函數,您將如何存儲它?很可能,你想用類似的方式將它存儲起來。 –

回答

3

首先,請不要投用C shmat()的返回值,有沒有點這樣做,它可以隱藏錯誤。第二,你永遠不會說「好」和「好」的意思;你在優化什麼?

我肯定會推薦存儲結構,如果這是有意義的應用程序,如果值是相關的,足以保證將它們存儲在一個結構,然後分享這個結構應該一樣多的意義。

當然,這意味着共享該訪問的應用程序是這樣tighly耦合具有共享結構聲明是沒有問題的。

0

共享內存的主要目的是進程間通信(IPC)。如果不是目標,我不覺得在共享內存

1

保存到要委派所有鑽孔作業結構(字段訪問,分配大小,對齊)存儲編譯器的任何原因。我認爲將它作爲一個結構是沒有危險的。結構或陣列 - 它仍然是一塊記憶。結構佈局告訴編譯器當你想通過有意義的名稱訪問內部的東西時,生成什麼偏移量。

相關問題