В обоих случаях вы получаете неинициализированную память и не можете делать никаких предположений о ее содержимом.
Когда ОС должна выделить новую страницу для вашего процесса (, будь то для своего стека или для арены, используемой malloc()
), она гарантирует, что не будет раскрывать данные из других процессов; обычный способ гарантировать это — заполнить его нулями (, но в равной степени можно перезаписать чем-нибудь другим, включая даже страницу стоимостью/dev/urandom
-на самом деле, некоторые отладочные malloc()
реализации записывают не -нулевые шаблоны, поймать ошибочные предположения, такие как ваше ).
Если malloc()
может удовлетворить запрос из памяти, уже использованной и освобожденной этим процессом, ее содержимое не будет очищено (по сути, очистка не имеет отношения к malloc()
и не может быть -это должно произойти до того, как память будет отображена в ваше адресное пространство ). Вы можете получить память, которая ранее была записана вашим процессом/программой (, например. передmain()
).
В вашей программе-примере вы видите область malloc()
, которая еще не была записана этим процессом (, т. е. она непосредственно взята с новой страницы )и стека, который был записан в (. ] с помощью предварительного кода-main()
в вашей программе ). Если вы исследуете больше стека, вы обнаружите, что он заполнен нулями -ниже (в направлении роста ).
Если вы действительно хотите понять, что происходит на уровне ОС, я рекомендую вам обойти уровень библиотеки C и вместо этого взаимодействовать с помощью системных вызовов, таких как brk()
и mmap()
.
Откройте файл запуска в текстовом редакторе. Найдите строку сIcon
Icon = app_name.
После знака равно пишем путь к нашей иконке
Icon = /home/user/icons/icon.png
Сохраните и перезагрузите Xes или ПК.