Пустой программе, которая ничего не делает на C++, нужна куча размером 204 КБ, но не на C.C++

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

Сообщение Anonymous »

Рассмотрим эту пустую программу:

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

int main()
{ return 0; }
Если я скомпилирую его на C++ с помощью g++ main.cpp && strace ./a.out и проанализирую вывод с помощью strace, я заметил, что последний строки вывода (вы можете добавить -O3, чтобы эффект был тот же):

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

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++ есть дополнительный блок, который расширяет кучу ровно на 204 КБ (0xf05000 - 0xed2000 = 204 КБ после перевода обоих в десятичный формат). Это можно легко проверить, заменив эту программу на (ссылка coliru):

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

#include 
#include 

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

return 0;
}
и вы можете легко заметить, что при компиляции с помощью g++ [куча] имеет размер 204 КБ, а с помощью gcc [куча]< строка /code> даже исчезла из вывода pmap.
ПРИМЕЧАНИЕ: Кстати, к моему удивлению, у gcc вообще не было проблем с включением и с наличием 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++»