我正在開發32位OSGEarth項目,我必須將選擇的圖像拼接成一個大圖像。切換到64位不是一個選項。分配大於32位的堆內存允許
圖像作爲256x256瓦片的集合存儲在內存中。 當用戶嘗試從多個圖塊創建單個圖像時,會出現問題,OSGEarth內部會嘗試分配比32位系統允許的更多的內存。
我試圖通過分配幾個數據塊來解決這個限制,每個數據塊大小爲1025個字節。然後,第1025個字節將「指向」下一個塊的開始,最後一個字節爲nullptr。
這是我目前在做什麼(我計劃分配在未來更多):
unsigned char* start = new unsigned char[1025];
unsigned char** head = &start;
unsigned char** tail = head + 1025;
for (unsigned int i = 0; i < 3; ++i)
{
auto c = new unsigned char[1025];
*tail = &c[0];
tail = &c + 1025;
}
memset(head, 'C', 1025 * 4);
不過,我有一些保留,如果我所期待發生的實際發生。內存是否真正分配在一個連續的塊中?如果沒有,那麼我的memset正在寫未分配的數據,這可能是不好的。
有沒有辦法解決32位的限制?
*切換到64位是不是一種選擇* - 你不能擠血掉石頭的。也許是時候重新考慮了? – PaulMcKenzie
「當OSGEarth試圖分配比32位系統更多的內存時,問題就出現了。」你的意思是3GiB以上? – ysdx
我正在處理地球的高分辨率地圖。圖像本身往往較小,但OSG要求的數據確實高達千兆字節。 – Acorn