Управление ресурсами

201
08 апреля 2017, 00:02

Возник такой вопрос, можно ли выделить некое пространство памяти, под разные типы данных, вот например я выделяю память под указатель из (heap), в размере 100мб, а далее я уже в этом пространстве (заранее знаю что не выйду за его пределы), буду подгружать другие данные, например есть загрузчик, который загружает саму инфу о карте, тайлы, звуки, анимацию, но под эти данные тоже выделяется память, тоже из (heap) и известно что она будет выделяться в свободном пространстве. Вот в чем собственно вопрос:

1) Можно ли поместить все эти данные в выделенную память (100мб).

2) Если я освобожу эти 100мб из того "главного" указателя, то будет ли выделяться та память которая была выделена например для текстур, то есть именно освобождения указателя на эту текстуру не происходило, зато было высвобождена вся память.

В итоге пришел к такому вот способу:

void *bigData = new char[sizeof(char)*1024];
char myNewData = '5';
memcpy((&bigData + sizeof(char)*8), &myNewData, sizeof(char));
cout << "data val: " << myNewData << endl;
cout << "start pos: " << &bigData << endl;
cout << "end pos: " << &bigData + (sizeof(char)*1024) << endl;
cout << "data in: " << &bigData + sizeof(char)*8 << endl;
cout << "data int copy block: " << *reinterpret_cast<char*>(&bigData + sizeof(char)*8) << endl;
delete [] bigData;
Answer 1

Насколько мне известно, выделяемую память можно представлять как линейную последовательность подряд идущих байт. Т.е. ответ на Ваш первый вопрос, можно ли выделив память первый раз, дальше использовать её куски отдельно в своих целях, записывая туда что угодно разных типов - то да, можно. Главное следить за границами, что бы данные не вылезали за пределы массива и не налазили друг на друга.

Ответ на второй вопрос - если вы освободите эту память из главного указателя, то остальные указатели будут теперь указыватьна "зомби" обьекты и память. Фактически Ваши данные из памяти не исчезнут, но сама эта память станет доступна для записи и для редактирования из вне, так что обьекты скорее всего через неторое количество времени будут повреждены и в них может появиться разный мусор, либо полностью испортив обьект, либо частично. Из-за этого могут возникать сбои в Вашей программе, поэтому стоит внимательно следить за тем, что Вы освобождаете.

READ ALSO
Регулярные выражения C++

Регулярные выражения C++

Имеется следующий код:

204
Ошибка при чтении символов из строки

Ошибка при чтении символов из строки

Пытаясь делать курсач застрял вот на таком моменте: Вот скрин кансоли на каком месте остановилась прога: А делаю я решение системы линейных...

406
Динамическое добавление html в dom с помощью JS

Динамическое добавление html в dom с помощью JS

Есть такой кодВ данном случае я вручную создаю каждую ячейку,заполняю ее и вставляю в ряд

242
Почему такой большой bundle.js?

Почему такой большой bundle.js?

изучаю reactjs на этом примере: https://metanitcom/web/react/5

212