Почему XCode выделяет ненужные байты перед основной функцией C ++? - PullRequest
0 голосов
/ 10 апреля 2020

Я очень удивлен, увидев вывод, когда я перегрузил новый оператор только для отслеживания распределения кучи. Я не понимаю, почему вместо целых 4 столько целых указателей?

Код:

#include <iostream>

void* operator new(size_t size) {
    std::cout << "Allocating " << size << " bytes. " << std::endl;
    return malloc(size);
}

int main() {
    std::cout << "Allocating for integer" << std::endl;
    int* a = new int;
}

Если прокрутить до конца, то получится 4 байта. история для распределения до этого? Я использую GNU 14 и Lib STDc ++, также пробовал с другими параметрами, такими как компилятор по умолчанию, и llvm все дают одинаковый вывод

Вывод:

Allocating 104 bytes. 
Allocating 48 bytes. 
Allocating 8 bytes. 
Allocating 64 bytes. 
Allocating 400 bytes. 
Allocating 24 bytes. 
Allocating 8 bytes. 
Allocating 64 bytes. 
Allocating 8 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 64 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 128 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 64 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 64 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 64 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 64 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 128 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 256 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 64 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 64 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 128 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 64 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 128 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 64 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 64 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 64 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 64 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 256 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 160 bytes. 
Allocating 24 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 88 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 88 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 80 bytes. 
Allocating 24 bytes. 
Allocating 112 bytes. 
Allocating 24 bytes. 
Allocating 24 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 48 bytes. 
Allocating 48 bytes. 
Allocating 72 bytes. 
Allocating 48 bytes. 
Allocating 32 bytes. 
Allocating 32 bytes. 
Allocating 72 bytes. 
Allocating 32 bytes. 
Allocating 96 bytes. 
Allocating 64 bytes. 
Allocating 16 bytes. 
Allocating 32 bytes. 
Allocating 16 bytes. 
Allocating 48 bytes. 
Allocating 208 bytes. 
Allocating 160 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 64 bytes. 
Allocating 48 bytes. 
Allocating 64 bytes. 
Allocating 56 bytes. 
Allocating 112 bytes. 
Allocating 80 bytes. 
Allocating 88 bytes. 
Allocating 80 bytes. 
Allocating 72 bytes. 
Allocating 72 bytes. 
Allocating 72 bytes. 
Allocating 96 bytes. 
Allocating 40 bytes. 
Allocating 48 bytes. 
Allocating 88 bytes. 
Allocating 32 bytes. 
Allocating 56 bytes. 
Allocating 56 bytes. 
Allocating 64 bytes. 
Allocating 48 bytes. 
Allocating 136 bytes. 
Allocating 136 bytes. 
Allocating 32 bytes. 
Allocating 40 bytes. 
Allocating 32 bytes. 
Allocating 96 bytes. 
Allocating 32 bytes. 
Allocating 80 bytes. 
Allocating 72 bytes. 
Allocating 40 bytes. 
Allocating 64 bytes. 
Allocating 88 bytes. 
Allocating 32 bytes. 
Allocating 40 bytes. 
Allocating 32 bytes. 
Allocating 216 bytes. 
Allocating 64 bytes. 
Allocating for integer
Allocating 4 bytes. 

1 Ответ

3 голосов
/ 10 апреля 2020

<iostream> довольно большой. Он содержит много вещей, необходимых для io. Как пример, он содержит std::cout, который является глобальным объектом. От cppreference :

Глобальные объекты std :: cout и std :: wcout управляют выводом в потоковый буфер типа, определенного реализацией (производного от std :: streambuf), связанный со стандартным C выходным потоком stdout.

Эти объекты гарантированно инициализируются во время или перед первым созданием объекта типа std :: ios_base :: Init и доступны для использования в конструкторы и деструкторы объектов stati c с упорядоченной инициализацией (если они включены до определения объекта).

Другими глобальными объектами в <iostream> являются std::cin, std::wcin, std::wcout, std::cerr, std::wcerr, std::clog и std::wclog.

Это ничего особенного для XCode. XCode - это просто IDE. Помимо предоставления вам удобных средств для вызова компилятора, он не имеет ничего общего с компиляцией вашего кода.

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