Может ли приложение явно выделять и освобождать память?

Может ли приложение явно выделять и освобождать память?

Возможно ли — из приложения — явно контролировать фиксации страниц памяти? В приложении Windows много лет назад я написал менеджер кучи «системы сигнализации», чтобы помочь мне найти случайную зависшую ошибку ссылки/повреждения кучи. Я мог зарезервировать большую область виртуальной памяти, а затем фиксировать/декоммитировать страницы по своему желанию. Идея в то время заключалась в том, чтобы создать набор, содержащий незафиксированную страницу, за которой следовали одна или несколько зафиксированных страниц (достаточных для выполнения запроса), за которыми следовала еще одна незафиксированная страница; с флагом времени компиляции, который контролировал, был ли указатель, возвращаемый вызывающей стороне, в начале или конце зафиксированной области (чтобы мгновенно срабатывать исключение при подписке или перезаписи соответственно). Windows предоставляет API для резервирования областей памяти и фиксации страниц. У меня есть еще одно применение для такого буфера с окончанием книги в программе Linux, которую я пишу, и мне интересно, предоставляет ли ядро ​​такую ​​же функциональность.

решение1

Я так понимаю, вы имеете в видуVirtualAllocидрузья. Насколько мне известно, в Linux нет прямого эквивалента, но вы можете добиться того же эффекта разными способами. Если вы хотите зарезервировать память, вы можете использоватьmmap(2); чтобы зафиксировать его, вам нужно записать в него; чтобы отменить его, вы можете использоватьmadvise(2)'s MADV_DONTNEED.

Для реализации страниц защиты вы можете найтиmprotect(2)чтобы быть лучшим вариантом, вместе с SIGSEGVобработчиком. Вы также можете посмотреть на защиту от переполнения, предоставляемую вашим компилятором ( -fstack-protectorи т. д., и различные -fsanitizeопции).

решение2

Если вы просто хотите отлаживать свои собственные программы, а не реализовывать сложный менеджер памяти, я рекомендую вам просто использовать такую ​​программу, каквалгринддля обнаружения утечек памяти и висячих указателей.

Связанный контент