189 похожих чатов

Я думаю, тут есть те, кто читал C++ for embedded

systems Аркадия Мясникова. В главе Memory managment он приводит класс, который берёт указатель на область памяти и размер для того, чтобы использовать его в качестве статического буфера. В конструкторе он использует placement new, чтобы "разместить" там массив. Я не могу понять, зачем использовать placement new и почему нельзя использовать указатель на прямую? Почему такой способ безопаснее?
'class MemoryRegion {
 
public:
    MemoryRegion(const char *name, uintptr_t address, size_t size) :
        name(name), address(address), size(size) {
        data = new (reinterpret_cast<void*>(address)) uint8_t[size];
    }
 
    size_t getSize() const {
        return size;
    }
    const char* getName() const {
        return name;
    }
    uintptr_t getAddress() const {
        return address;
    }
 
protected:
 
    const char *name;
    uintptr_t address;
    size_t size;
    uint8_t *data;
};
 

3 ответов

6 просмотров

placement new мог бы быть нужен для того, чтобы вызвать конструкторы элементов массива. у uint8_t конструкторов нет, так что и смысла нет

Указатель на что? как я понимаю это нечто куда вы передаёте указатель на область памяти которую хотите выделить, использовать память по указателю не выделяя ее конечно можно, но никто вам не гарантирует что кто-то ещё тоже не начнёт использовать

А вы книгу покупали или скачали где кстати?

Похожие вопросы

Обсуждают сегодня

А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
что насчет пагинга? на осдеве непонятно(
Vi Chapmann 🪙
21
Вопрос я правильно понимаю что в коде newtype ArrowMap k v = ArrowMap { getArrowMap :: k -> Maybe v } getArrowMap есть функция типа k -> Maybe v, если да, то не понимаю задач...
Fedor
64
Ребят, что лучше для реверса: гидра или ида?
En Vind Av Sorg
26
Делаю велосипед логгер. К сообщению хочу прикрутить некоторую информацию, типа, кем отправлено, какой уровень, и всякое такое. И тут подумалось мне, почему бы не хранить весь...
Serjone
24
Как Вы считаете нормально ли в двадцатых годах 21 века в ВУЗах Российской Федерации обучать студентов работе с TASM? Не слишком ли это "архаично"? (Если оффтоп или флейм для э...
Spiker01
52
если загрузчик efi? если сама PML4 PDPT PDT PT лежит в неудобном для меня месте?
Vi Chapmann 🪙
8
А я же правильно понимаю, что инструкция AT в ld только сохраняет метаинформации о том, куда загрузить сегмент, которую далее из эльфика читает grub(ну если граб)? Но я тогда ...
Evg Resh
2
Господа, импользую кастомный загрузчик, ядро запускается сразу в длинном режиме, хочу узнать, сколько всего физической ОЗУ есть у машины. И, может, знаете какие-то подводные к...
Vi Chapmann 🪙
6
Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
48
Карта сайта