На мій догматичний погляд з цього приводу, в жодній бібліотеці, яка має на меті бути широко застосовною, немає виправдань для фізичних витоків. Тому я б прагнув помилитися з розробниками GTK +, поки вони самі їх не виправлять.
Досить тривіально, щоб бібліотека зареєструвала atexit
зворотні дзвінки, щоб звільнити будь-яку пам'ять, яку вона виділяє, принаймні після завантаження. Якщо він хоче уникнути витрат суднових асигнувань, не слід робити це в першу чергу.
Навіть найлініша програма, яка просто хоче виділити навантажений човном шматок пам'яті відразу, може використовувати прямий послідовний розподільник, який просто очищає всю пам'ять при відключенні. Якщо алокатор навіть не хоче мати справу з вирівнюванням, він може просто прокладати кожен окремий фрагмент, який об'єднується до максимальних меж вирівнювання. Якщо йому вдалося скористатися швидшими часом відключення, не звільняючи всі ці підліткові шматки пам’яті окремо, це також виграє багато симетрично в обмін на тривіальні зусилля, використовуючи такий послідовний розподільник, який об'єднує пам’ять прямо-таки послідовно набагато швидші асигнування, ніжmalloc
і більше зручних для кешу шаблонів пам’яті, лише щоб звільнити всі великі блоки суміжної пам’яті, об'єднані алокатором, коли бібліотека створена. Тоді все, що потрібно зробити, - це замінити свої malloc
дзвінки, на які вони не турбуються, free
чимось подібним seq_malloc
, і зателефонувати seq_purge
в atexit
зворотному дзвінку , щоб звільнити всю пам'ять, виділену після завантаження.
В іншому випадку у вас ця неприємна бібліотека захаращується повідомленнями у ваших інструментах виявлення витоку пам’яті, які вам зараз доведеться відфільтрувати. Гірше, якщо ви не систематично їх фільтруєте, вони можуть приховати витоки у вашій власній програмі, і ваші колеги можуть розвинути звичку їх переглядати, знижуючи в першу чергу корисність інструментів виявлення витоків у запобіганні власній команді від натискання на протікає код. Це жорстоко і некрасиво, і більше за все я не знаходжу аргументів на користь того, щоб робити це навмисно, щоб переконатись на всіх, враховуючи, наскільки тривіальним є використання рішення вище.
Логічні витоки (більш складний вид, від якого навіть сміття не може захистити) є складнішим питанням, і там я міг би знайти певне виправдання для короткочасних програм, щоб мати логічні витоки, якщо вони очищають всю пам'ять, яку вони виділили відключення, оскільки воно потребує великої думки щодо управління ресурсами, щоб уникнути логічних витоків (можливо, тим більше в мовах, на яких є GC). Але я не знаходжу жодного розумного приводу, щоб уникнути фізичних витоків, враховуючи, наскільки тривіальними вони є, щоб уникнути навіть у самих ледачих контекстах.
У всякому разі, я, як мінімум, відфільтрував би течі на вальгринд, щоб вони принаймні не псувалися зі здатністю вашої команди помітити вашу власну.