我正在开发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