Выход: 4
Я просто хочу спросить, что даже я не создал объект класса Test, почему он печатает 4?Занятия занимают память?
ответ
sizeof(X)
- количество байтов, которое принимает X
при создании. Вызов new
имеет тенденцию использовать еще несколько байтов для служебных данных памяти, но массив с автоматическим хранением (on-stack или local или global или static и т. Д.) Размером X[N]
займет на практике память N*sizeof(X)
(немного, может быть, для функции local statics из-за требований безопасности потока).
Это не имеет никакого отношения к количеству памяти, которое сам тип принимает.
Классы сами используют память, если у них есть методы, которые не оптимизированы, если они имеют таблицу vtable (вызванную использованием ключевых слов virtual
) или аналогичные. Тогда память, хранящая код или таблицы виртуальных функций, может существовать вне затрат на память экземпляров класса.
В самом языке C++ нет способа определить, сколько памяти занимает сам класс, а также нет надежного способа определить, что такое служебные данные new
. Обычно вы можете решить эту проблему, просмотрев поведение во время выполнения или код для компилятора или библиотек времени исполнения для данной платформы.
В общем, 'class' или' struct' является концепцией и не занимает пространство переменных (данных), но оно занимает память в памяти компилятора. Если '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Переменная или экземпляр 'class' или' struct' занимает память. –
@thom вы согласны или не согласны? Несколько систем различают код и память данных (некоторые системы записывают код в ПЗУ или тому подобное). Я предполагаю, что некоторые могут также кодировать vtables. Но большинство современных компьютеров, память - это память с большинством бит защиты/выполнения, установленными в таблице страниц. Я хочу сказать, что существует несколько способов, которыми класс может «занять память»; на практике это даже может быть priblem, потому что я могу написать код, который генерирует непристойное количество типов из очень короткой программы. – Yakk
Не забудьте указать статические переменные-члены, которые занимают пространство памяти;) – YSC
- 1. Униализованные поля занимают память?
- 2. C++ do ссылки занимают память
- 3. Является ли шаблон Null Object занимают память
- 4. Нераспределенные свойства занимают память в классе?
- 5. Нуль SQLite Поля данных занимают дополнительную память?
- 6. Является ли сообщение Уведомление занимают память?
- 7. Нулевые записи в numpy.array занимают память?
- 8. ли методы оператора занимают память в объектах C++?
- 9. Делают элементы массива указателей, инициализированных NULL, занимают память?
- 10. Как узнать таблицы, которые занимают максимальную память в базе данных?
- 11. Большие войны с портлетами занимают память, вызывая проблемы с производительностью?
- 12. Занятия в WCF
- 13. Занятия в классе презентаций?
- 14. Практические занятия класса MethodRental?
- 15. Сохраните мои собственные занятия?
- 16. Занятия не меняются
- 17. Занятия в операторах дела
- 18. Занятия и их реализация
- 19. Занятия в Genie
- 20. Где разместить занятия?
- 21. Регулярные занятия в сервлеты
- 22. Как организовать мои занятия?
- 23. Занятия в Китуре?
- 24. Занятия JQuery и codeigniter
- 25. Занятия в Swift
- 26. Занятия в области Java
- 27. Практические занятия Java
- 28. Занятия в NSBundles
- 29. Занятия Django не работают
- 30. Thymeleaf и занятия
В топливном баке вашего автомобиля есть 50 литров топлива, потому что '' volume (fuel_tank) '' возвращает 50? – BitTickler
Я получил это благодарность. – shuboy2014
Технически ОС пришлось загрузить исполняемый файл в память, поэтому класс может занять память! Ключевое слово здесь - «возможно», потому что все зависит от того, как ОС обрабатывает исполняемый файл и как компилятор компилирует класс и какова архитектура процессора. –