Когда мы делаем malloc(), память будет выделена и будет возвращен базовый адрес. Если я вызываю free(), он освободит память, выделенную malloc(). Я сомневаюсь, что количество байтов, выделенных свободным, будет храниться помимо базового адреса, free() проверит это число и освободит выделенную память. Так будет ли возможно напечатать это значение (количество выделенных байтов).Возможно ли напечатать значение, которое free() хочет освободить память?
1
A
ответ
2
Даже если он работает, он не будет переносимым вообще. Стандарт ничего не говорит об этом.
Это зависит от реализации, и вы не можете положиться на это.
3
Приложение должно отслеживать количество байтов, присвоенных указателю, и если эта память уже была free()
ed снова.
В C нет портативного способа извлечения объема памяти, выделенного указателю, через сам указатель.
2
Когда вы используете malloc
, вы получаете необходимый объем памяти или указатель null
. Итак, в этот момент вы знаете количество байтов, и вам нужно сохранить его, если хотите его использовать.
Как malloc
и free
работ зависят от операционной системы. Каждая версия каждой ОС могла бы выполнять эту операцию по-разному.
Смежные вопросы
- 1. Возможно ли частично освободить память?
- 2. Возможно ли освободить память вручную?
- 3. Использование free() не может освободить память
- 4. Может ли объект освободить память?
- 5. Невозможно освободить выделенную память
- 6. Можно ли освободить выделенную память из C++
- 7. не может освободить память
- 8. Должен ли я освободить память перед выходом?
- 9. Освободить память
- 10. можно ли освободить память UIWebView?
- 11. Возможно ли частично освободить динамически выделенную память в системе POSIX?
- 12. Можно ли освободить память перед началом действия?
- 13. Как я могу освободить память?
- 14. MIPS: Возможно ли напечатать значение, которое находится внутри хранилища, которое содержит слово?
- 15. Как освободить память на Java?
- 16. освободить память на двойной указатель
- 17. Возможно ли освободить статически определенный массив?
- 18. Освободить память для объекта
- 19. Возможно ли напечатать память переменной Objective-C, iOS?
- 20. Как освободить виртуальную память?
- 21. Как освободить память в функции
- 22. Освободить память в GridView
- 23. Three.js - освободить память
- 24. Невозможно освободить память от функции
- 25. попытка освободить память вызывает ошибки
- 26. Как освободить память в C
- 27. C LinkedList - как освободить память?
- 28. Как узнать, когда освободить память?
- 29. Как освободить память в C?
- 30. Возможно ли освободить() указатель, возвращаемый функцией?
Это зависит от реализации. Если вы посмотрите на реализацию своей стандартной библиотеки, вы всегда можете попробовать заглянуть в связанные с ней структуры данных, но * вы не должны *. Поэтому вы можете попробовать это для науки, но не ставьте это в производственный код. – Thomas
Прочитайте исходный код вашего распределителя. Для этого, я полагаю, вам сначала нужно определить, какой распределитель использует ваша библиотека или ваш проект (например, ptmalloc2, tcmalloc). Вы также можете проверить GCC 'malloc.h' для некоторых функций GCC-специфичных функций. Работа с внутренними элементами выделения и освобождения является ядром уязвимостей ошибок кода на основе кучи, поэтому есть много «интереса сообщества», если хотите. –