Возможно ли в С++ создать новый объект в определенной ячейке памяти? У меня есть блок разделяемой памяти, в котором я хотел бы создать объект. Возможно ли это?
Создать новый объект С++ по определенному адресу памяти?
Ответ 1
Вы хотите размещение new
(). Он в основном вызывает конструктор, используя блок существующей памяти вместо выделения новой памяти из кучи.
Изменить: убедитесь, что вы понимаете примечание о том, что вы отвечаете за вызов деструктора явно для объектов, созданных с помощью размещения new()
, прежде чем использовать его!
Ответ 2
Да. Вам нужно использовать вариант размещения оператора new(). Например:
void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;
Обратите внимание, что размещение new не генерирует исключение.
Ответ 3
если вы хотите выделить много мелкозернистых объектов, лучшим подходом будет использование нового места в сочетании с каким-то кольцевым буфером. в противном случае вам придется отслеживать указатели в стороне от самих указателей объектов.
Ответ 4
В Windows MapViewOfFileEx и VirtualAllocEx разрешить один для указания предпочтительного виртуального адреса. Однако никаких гарантий.