我正在尋找關於在Windows上共享內存段中存儲少量數據(只有幾個字節)的建議和建議。使用Windows共享內存共享小數據
現在,無論何時映射共享內存,我們都會將映射大小舍入到最接近的4KB,這樣我們就可以得到多個映射的頁面。
mem_size = ((mem_size + 4095)/4096) * 4096;
但是,我想映射足夠的內存來共享進程之間的命名整數。或者更具體地說,在進程之間有許多不同名稱的整數。大約一千個整數,所有名稱都不相同,每個整體都映射有一個或多個進程,這正是我所看到的。
我不想將4個字節四捨五入到4KB,因爲這將是一個巨大的浪費。在創建了一千多個這樣的內容之後,當我只需要一個時,我就會使用大約一千頁。
但我擔心只有4個字節創建一個命名的內存段的開銷。操作系統是否「合理」足以在可能的情況下試圖將不同的映射放入同一頁面? (我知道沒有保證)。或者這會很快吹滅?
我曾考慮映射一個巨大的內存塊,但仍然需要按名稱引用個別整數。在共享內存中維護一個哈希表似乎我只是在複製操作系統的工作。
是否有替代CreateFileMapping/OpenFileMapping
和MapViewOfFile
技術,這將更適合在進程之間共享非常少量的數據?還是我擔心什麼都沒有?
你說多少個整數(粗略)? –
@JonathanPotter粗略的估計大概是1000,所有的名字都不一樣。每一個都將被一個或多個進程映射。 – Anthony
如果您不想複製/實現您自己的散列系統,我可以想到的是使用'GlobalAddAtom()'爲每個名稱獲取一個原子,將一個數據塊作爲原子 - >索引的映射來維護,另一塊數據存儲實際數據。這並不理想,因爲它需要線性搜索原子圖來將原子轉換爲索引。 –