Подтвердить что ты не робот

Что означает новый (3)?

SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);

Что означает здесь оператор new?

Какое значение числа 3 после оператора new?

4b9b3361

Ответ 1

Этот код исходит из LLVM codebase. Там в пользовательском operator new в области, и он используется для размещения- new инициализировать объекты (cfr. синтаксис размещения)

void *User::operator new(size_t Size, unsigned Us) {
  return allocateFixedOperandUser(Size, Us, 0);
}

Вот пример игрушки:

class SelectInst
{
public:
  int x;
};

void *operator new(size_t Size, unsigned Us) {
                                ^^^^^^^^^^^ 3 is passed here
                   ^^^^^^^^^^^ allocation size requested

  return ... // Allocates enough space for Size and for Us uses
}

SelectInst *Create() {
  return new(3) SelectInst();
}

int main()
{
  auto ptr = Create();
  return 0;
}

Живой пример

В частности, этот код используется для настройки выделенного пространства для размещения дополнительных данных.

Ответ 2

Предположим, что SelectInst предоставляет пользовательский оператор размещения new, который принимает int как определяемый пользователем аргумент; синтаксис вызова означает использование этого места размещения operator new для размещения памяти. например.

class SelectInst {
public:
    static void* operator new (std::size_t count, int args) {
    //                                            ~~~~~~~~
        ...
    }
};

SelectInst *Sel = new(3) SelectInst(C, S1, S2, NameStr, InsertBefore);
//                   ~~~

Ответ 3

Вероятно, у вас есть пользовательский оператор new в SelectInst или в глобальной области (аналогично размещению нового):

struct SelectInst
{
    SelectInst(/*...*/);
    // ...

    static void* operator new(std::size_t sz, int custom);
    static void operator delete(void* ptr, int custom); // new counter part
};

или

void* operator new(std::size_t sz, int custom);
void operator delete(void* ptr, int custom); // new counter part

См. последнюю часть operator_new

Ответ 4

В doc говорится, что это объем памяти, который требуется запросить в байтах. (Если он не был перегружен) Здесь это запрос 3 * 8 = 24 бит для хранения объекта в памяти. Подумайте об этом в каком-то остатке malloc.