Скільки памяті займає Long

Як дізнатися, чим зайняте місце на жорсткому диску, кращі програми для аналізу памяті

Багато користувачів хочуть знати про те, чим саме зайняте місце на їхньому диску і чому воно постійно зменшується. Найчастіше це буває пов’язано з файлами оновлення системи або з точками відновлення. Однак, існують утиліти, які можуть детально розповісти і показати, які саме файли і скільки місця займають на диску користувача, про них буде розказано далі.

Використовуємо WinDirStat для аналізу зайнятого місця

Ця утиліта одна з небагатьох, які доступні в безкоштовному варіанті. При все при цьому вона володіє російським інтерфейсом, що дуже полегшує взаємодію з нею. Після запуску є кілька варіантів того, як діяти далі. Можна дозволити додатком провести перевірку всіх накопичувачів. Також користувач може самостійно встановити ті диски, які будуть перевірятися в першу чергу. Якщо є таке бажання, то можна проаналізувати навіть окремий каталог та дізнатися, яка саме інформація там зберігається.

Дивіться також: Кращі платні і безкоштовні додатки крокоміри для андройд російською, як працюють крокоміри в телефоні

Після закінчення процесу користувачеві буде представлена вся інформація, яку додаток змогло виявити. Тут можна побачити папки, які займають найбільше місця, це можна побачити на шкалі поряд з ними, на якій відображається відсоток від загального зайнятого місця на диску. У правій частині представлена розшифровка графіків та показано, яким кольором, які файли відзначені. В нижній частині екрану можна побачити, які типи файлів, які займають найбільше пам’яті. Наприклад, на зображенні видно, що файл tmp, який є тимчасовим, займає непристойно багато місця.

Ласкаво просимо!

Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов’язаного з інтернетом та комп’ютерами.

Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.

Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.

Український форум програмістів → C++ → Як визначити скільки памяті займає об’єкт?

Сторінки 1

Для відправлення відповіді ви повинні увійти або зареєструватися

Повідомлення: 15

1 Тема від mimik 03.09.2020 16:08:31

Тема: Як визначити скільки памяті займає об’єкт?

Я знаю, що є оператор sizeof, але мене цікавить, чи можна написати свій аналог?
Тобто, чи можна десь подивитися на реалізацію sizeof, ну, чи на те, як він працює?

2 Відповідь від koala 03.09.2020 16:46:52 Востаннє редагувалося koala (03.09.2020 16:49:01)

Re: Як визначити скільки памяті займає об’єкт?

Можете пояснити, що саме ви збираєтеся робити? Можете навести приклад коду, в якому вам потрібен цей аналог замість звичайного sizeof?
Реалізацію можете подивитися у вихідному коді компілятора, але навіщо? Що саме не зрозуміло з його роботою?

sizeof насправді вбудований досить глибоко в структуру мови. C++ активно покладається на арифметику вказівників, і неможливо знайти наступний елемент масиву без sizeof. Нащо його змінювати чи перевизначати?

3 Відповідь від mimik 03.09.2020 16:55:24

Re: Як визначити скільки памяті займає об’єкт?

Ну, як я зрозумів sizeof працює лише в момент компіляції, а якщо я допустимо хочу дізнатися розмір під час виконання?
Не зовсім зрозуміло, як він реалізований всередині? Тобто є якісь дескрайбери для об’єктів?
Я не збираюся замінювати вбудований sizeof, а просто мати свою версію в додаток, не більше.

4 Відповідь від wander 03.09.2020 16:59:30 Востаннє редагувалося wander (03.09.2020 17:00:47)

Re: Як визначити скільки памяті займає об’єкт?

Я знаю, що є оператор sizeof, але мене цікавить, чи можна написати свій аналог?

Тобто, чи можна десь подивитися на реалізацію sizeof, ну, чи на те, як він працює?

Подивитися, напевно, так, як ви собі уявили не можна.

Ну, як я зрозумів sizeof працює лише в момент компіляції, а якщо я допустимо хочу дізнатися розмір під час виконання?

Ем, що?
В статично типізованій мові не буває об’єкта без типу, а раз так, то достатньо знати розміру типу на етапі компіляції.
Якщо у вас об’єкт невідомого типу, і ви посилаєтеся на нього, наприклад через void-вказівник, то ніяк ви його розмір не визначите.

Не зовсім зрозуміло, як він реалізований всередині? Тобто є якісь дескрайбери для об’єктів?

“Класичний” sizeof – конструкція часу компіляції. Компілятор знає розмір кожного типу. Звідси sizeof і знає, “скільки пам’яті займає об’єкт”. Компілятор знає, що тип int має розмір 4. Тому sizeof(int) дає 4.

Урок №33. Розмір типів даних

Як ми вже знаємо з уроку №31, пам’ять на сучасних комп’ютерах, як правило, організована в блоки, які складаються з байтів, причому кожен блок має свою унікальну адресу. До цього моменту, пам’ять можна було порівнювати з поштовими скриньками (ті, які знаходяться в кожному під’їзді), куди ми можемо помістити інформацію і звідки ми її можемо витягти, а змінні — це всього лише номери цих поштових скриньок.

Проте, ця аналогія не зовсім підходить до програмування, так як змінні можуть займати більше 1 байту пам’яті. Отже, одна змінна може використовувати 2, 4 або навіть 8 послідовних адрес. Об’єм пам’яті, який використовує змінна, залежить від її типу даних. Оскільки ми отримуємо доступ до пам’яті через імена змінних, а не через адреси пам’яті, то компілятор може приховувати від нас всі деталі роботи зі змінними різних розмірів.

Є декілька причин, чому корисно знати, скільки пам’яті займає певна змінна або тип даних.

По-перше, чим більше вона займає, тим більше інформації може зберігати. Оскільки кожен біт може містити або 0 , або 1 , то 1 біт може мати 2 можливих значення.

2 біти можуть мати 4 можливих значення:

3 біти можуть мати 8 можливих значень:

біт 0 біт 1 біт 2
000
001
010
011
100
101
110
111

По суті, змінна з n-ною кількістю біт може мати 2 n можливих значень. Оскільки байт складається з 8 біт, то він може мати 2 8 (256) можливих значень.

Розмір змінної накладає обмеження на кількість інформації, яку вона може зберігати. Отже, змінні, які використовують більше байт, можуть зберігати більш широкий діапазон значень.

По-друге, комп’ютери мають обмежену кількість вільної пам’яті. Кожен раз, коли ми оголошуємо змінну, невелика частина цієї вільної пам’яті виділяється до тих пір, поки змінна існує. Оскільки сучасні комп’ютери мають багато пам’яті, то в більшості випадків це не є проблемою, особливо коли в програмі всього лише декілька змінних. Проте для програм з великою кількістю змінних (наприклад, 100 000 змінних) різниця між використанням 1-байтових або 8-байтових змінних може бути значною.

Розмір основних типів даних в С++

Виникає питання: “Скільки пам’яті займають змінні різних типів даних?”. Ви можете здивуватися, але розмір певних типів даних залежить від компілятора і/або архітектури комп’ютера!

Мова C++ гарантує тільки їх мінімальний розмір:

Тип Мінімальний розмір
Логічний тип даних bool1 байт
Символьний тип даних char1 байт
wchar_t1 байт
char16_t2 байти
char32_t4 байти
Цілочисельний тип даних short2 байти
int2 байти
long4 байти
long long8 байт
Тип даних з плаваючою крапкою float4 байти
double8 байт
long double8 байт

Фактичний розмір змінних може відрізнятися на різних комп’ютерах, тому для його визначення використовують оператор sizeof.

Оператор sizeof — це унарний оператор, який обчислює і повертає розмір певної змінної або певного типу даних в байтах. Ви можете скомпілювати і запустити наступну програму, щоб з’ясувати, скільки пам’яті займають різні типи даних на вашому комп’ютері: