2010-12-06 3 views
1

Я использую MS VS 2010, C++, неуправляемый. Я хотел бы разделить выделенную область, если это возможно. Например, скажем, я выделил 1Kb пространство в памяти:split malloc mem space

void* space = malloc(1024); 

позже, я решил этот блок как отдельный 512 байт и 512 байт пространства:

space1 = 512B and space2 = 512B 

и, наконец, когда я хочу, чтобы избавиться от эти пространства Я хочу освободить их отдельно:

free(space1); 
free(space2); 

Это возможно без перераспределения/расширения/сокращения памяти?

Спасибо всем ..

ответ

1

Нет, вы не можете освободить их по отдельности, как таНос() будет держать только одну копию необходимых данных бухгалтерского учета, поэтому он может только бесплатно один кусок. Вам придется писать свои собственные malloc/free wrappers.

+0

Это было быстро :) Я бы хотел, чтобы было решение для этого .. Ну это будет ждать, я начинаю писать диспетчер памяти, чем .. thnx. – MCA 2010-12-06 15:13:43

+0

@MCA, принято принимать ответ, который вы предпочитаете, используя галочку, которая находится ниже количества полученных ею голосов. Поскольку ответ DeadMg кажется тем, который вы решили удовлетворить вашим непосредственным потребностям, вы должны его принять. – 2010-12-06 15:19:06

0

Вы можете использовать Windows API, для отвалов: http://msdn.microsoft.com/en-us/library/aa366711(VS.85).aspx

HeapAlloc() является эквивалентом malloc. Основное отличие заключается в том, что получает еще один параметр: какую кучу использовать. Эти кучи могут быть созданы с помощью HeapCreate, и вы можете зарезервировать место для них.

1

Вкратце: вам нужно будет написать свой собственный распределитель памяти поверх malloc/new.

Более длинная версия: Поскольку реализации распределителя памяти отличаются друг от друга, нет возможности модифицировать свои внутренние структуры данных, которые отслеживают выделенные и свободные блоки &.

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

Другие методы помещают свои данные управления извне из блоков, например, с помощью растровых изображений, связанных списков и т. Д. У вас может быть больше удачи с ними.

Опять же, вам лучше написать собственный распределитель.

Еще лучше, если это вообще возможно, попробуйте найти альтернативные способы управления своей памятью. Возможно, пул-распределители - это нечто большее, что вам нужно.

Смежные вопросы