Использование памяти SDL - PullRequest
1 голос
/ 09 апреля 2011

Я пишу очень простое приложение SDL, но когда я запускаю его через valgrind, оно сообщает о нескольких потерянных блоках, явно связанных с библиотекой SDL (прежде чем вы спросите об этом, я вызываю SDL_Quit, или, точнее, я звоню atexit(SDL_Quit)).Вот пример:

==2525== 192 (16 direct, 176 indirect) bytes in 1 blocks are definitely lost in loss record 107 of 131
==2525==    at 0x4C25502: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2525==    by 0x644244A: ??? (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x6442989: ??? (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x64440A2: ??? (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x6444915: _XlcCreateLC (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x6462B5F: _XlcDefaultLoader (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x644C325: _XOpenLC (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x644C467: _XlcCurrentLC (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x644C4BD: XSetLocaleModifiers (in /usr/lib/libX11.so.6.3.0)
==2525==    by 0x4E69EED: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==2525==    by 0x4E6A57F: ??? (in /usr/lib/libSDL-1.2.so.0.11.3)
==2525==    by 0x4E59E00: SDL_VideoInit (in /usr/lib/libSDL-1.2.so.0.11.3)

Я искал здесь на StackOverflow и нашел похожий вопрос.Ответ состоял в том, что, очевидно, в библиотеке есть несколько небольших буферов, которые авторы никогда не хотят освобождать.У меня вопрос, какова мотивация такого подхода?Зачем выделять что-то, а потом сознательно не free() это?

1 Ответ

1 голос
/ 10 апреля 2011

Если буферы нужны до конца программы, нет необходимости их освобождать.Когда программа выходит из всей используемой памяти, она все равно освобождается ОС.Если программа потрудится освободить блоки перед выходом, это только замедлит выход из программы.

...