Я разрабатываю игру на C ++, похожую на Minecraft, которая хранит огромное количество данных о местности в памяти. В общем, я хочу сохранить массив в памяти, который является [5] [4] [5] [50] [50] [50]. Это неплохо, поскольку он составляет около 100 МБ виртуальной памяти, так как моя структура будет составлять всего около 8 байт.
Однако у меня проблемы с поиском лучшего способа справиться с этим. Я хочу, чтобы это было в виртуальной памяти, но, очевидно, не в стеке. И я продолжаю ошибаться, каким образом создание этого массива в стеке вызывает переполнение стека. То, что я хотел бы сделать, ниже. Это просто код, который я написал вместе, чтобы дать вам пример того, что я делаю, у меня есть код с правильным синтаксисом на моей машине, я просто не хотел загромождать сообщение.
typedef struct modelBlock
{
// Information about the blocks
} BLOCK;
typedef struct modelGrid
{
bool empty;
BLOCK blocksArray[50][50][50];
} GRID;
class Parent
{
Child* child;
Parent(void);
}
Parent::Parent()
{
Child c;
child = &c;
}
class Child
{
GRID grids[5][4][5];
}
Однако каждый раз, когда я делаю это, я вызываю переполнение стека (правильный выбор веб-сайта, верно?). Я играл с использованием массивов, основанных на указателях, но у меня было много проблем с потерями данных за пределами их области видимости.
Если бы кто-нибудь мог дать мне некоторое представление о том, как заставить мои данные храниться в куче, а не в стеке, или если бы я использовал какой-то другой способ создания массива, я был бы очень признателен за помощь. Я хотел бы избежать использования векторов из-за накладных расходов, хотя я не уверен, насколько они существенны.