Разница в использовании памяти между malloc и new в C++C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Разница в использовании памяти между malloc и new в C++

Сообщение Anonymous »

Я наблюдаю разницу в общем распределении памяти при использовании malloc и new в простой программе на C++, как сообщает Valgrind. Ниже приведены две версии моей программы и соответствующие выходные данные Valgrind.
Версия с использованием malloc:

Код: Выделить всё

#include 
int main() {
int* a = (int *)malloc(4);
return 0;
}
Вывод Valgrind для malloc:

Код: Выделить всё

==34673== HEAP SUMMARY:
==34673==     in use at exit: 4 bytes in 1 blocks
==34673==   total heap usage: 1 allocs, 0 frees, 4 bytes allocated
Версия с использованием нового:

Код: Выделить всё

int main() {
int* a = new int;
return 0;
}
Вывод Valgrind для нового:

Код: Выделить всё

==35295== HEAP SUMMARY:
==35295==     in use at exit: 4 bytes in 1 blocks
==35295==   total heap usage: 2 allocs, 1 frees, 72,708 bytes allocated
Я не понимаю, почему существует такая значительная разница в «общем использовании кучи», указанном для этих двух случаев. В частности, почему новая версия сообщает о гораздо большем количестве выделенных байтов по сравнению с версией malloc? Связано ли это с тем, как C++ внутренне обрабатывает управление памятью при использовании new?
Кроме того, накладные расходы составляют 72 704 Б, даже если я использую только этот код:

Код: Выделить всё

#include 
int main() {
return 0;
}
Похоже, что эти накладные расходы как-то связаны с динамическим управлением памятью, но я не понимаю, почему они настолько значительны.

Код: Выделить всё

g++ --version
g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

valgrind --version
valgrind-3.18.1
команда, которую я использовал для сборки g++ program_name.cpp, а затем valgrind ./a.out

Подробнее здесь: https://stackoverflow.com/questions/787 ... d-new-in-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»