Пустая программа, которая ничего не делает в C ++, нуждается в куче 204 кб, но не в CC++

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

Сообщение Anonymous »

Рассмотрим эту пустую программу: < /p>

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

int main()
{ return 0; }
If I compile it with C++ with g++ main.cpp && strace ./a.out, and analyze the output with strace, I observed that the last lines of the output are (you can add -O3 that the effect is the same):

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

mprotect(0x7f71af154000, 45056, PROT_READ) = 0
mprotect(0x7f71af38b000, 4096, PROT_READ) = 0
brk(NULL)                               = 0xed2000
brk(0xf05000)                           = 0xf05000
exit_group(0)                           = ?
+++ exited with 0 +++
Однако, если я сделаю вместо этого: gcc main.cpp && strace ./a.out

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

mprotect(0x7f4114318000, 16384, PROT_READ) = 0
mprotect(0x7f4114547000, 4096, PROT_READ) = 0
exit_group(0)                           = ?
+++ exited with 0 +++
Как вы видите, в C ++ есть дополнительный Brk , который расширяет кучу ровно на 204 кб (0xf05000 - 0xed2000 = 204 кб после перевода обоих в десятичное значение). Это можно легко проверить, заменив эту программу на ( coliru link ):

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

#include 
#include 

int main()
{
char buf[1024];
sprintf(buf, "pmap -XX %u", getpid());
std::system(buf);

return 0;
}
И вы можете легко заметить, что компиляция с G ++ The [Heap] имеет размер 204 кб, а с GCC Line [Heap] даже исчезла из PMAP . Вообще не было никаких проблем с включением и с присутствием std в std :: System .
Для чего используются эти 204 кб? Я не беспокоюсь или о чем -то еще об этих маленьких 204 тыс. Б, но это привлекло мое внимание, и мне любопытно.

Подробнее здесь: https://stackoverflow.com/questions/791 ... t-not-in-c
Ответить

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

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

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

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

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