Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4

Как sizeof определяет сколько памяти занимает объект?

02.09.2020, 00:21. Показов 7686. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В сети смотрел эту тему но смотрю люди не знают тоже.
У меня есть несколько точек зрения по этому поводу.
1. Объект может иметь описатель, но честно говоря создавать описатель ради одного очень дорого. И мне кажется это бред.
2. Возможно оперативная память или память ОС поделена на блоки 1 2 4 8, и при объявлении переменной происходит запрос адреса в нужном типе блока, указатель отодвигается т.к. происходит выделение 1 яч. памяти под переменную(можно сказать что это тоже динамическая автоматическая память), и мы как пользователи используем одну ячейку из такого блока, обращаясь к адресу используя имя переменной и тем самым sizeof который не является функцией заранее знает сколько байт занимает элемент т.к. обращается в блок и смотрит если наличие адреса по имени в блоке имеется то читается описатель блока в котором сказано что все переменные из этого блока по 4 байта к примеру.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2020, 00:21
Ответы с готовыми решениями:

Как узнать сколько байтов в памяти занимает объект?
Есть ли в Java аналог sizeOf?

Узнать сколько занимает памяти объект.
Здравствуйте. Кто нибудь в курсе, как можно узнать сколько "весит" экземпляр написанного мной класса? То есть мне нужно создать экземпляр...

Как узнать сколько программа занимает памяти ?
открываю Connect с Access (ADO) по таймеру идет Execute на UPDATE или INSERT это жутко жрет память, может это нормальное явление ?? ...

34
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
03.09.2020, 01:56  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от DrOffset Посмотреть сообщение
Все верно, никаких таблиц с информацией о размерах типов на этапе исполнения не существует. На этапе исполнения уже везде фигурируют только константы заботливо подставленные компилятором во все нужные инструкции на этапе компиляции.
Значит нужно самому строить такие списки это не сложно но дорого обойдётся пользователь выше предложил такой вариант значит всё понятно сделать это невозможно.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
03.09.2020, 02:03
Цитата Сообщение от Nexi99 Посмотреть сообщение
Значит нужно самому строить такие списки
Зачем они вам нужны?
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
03.09.2020, 02:05  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем они вам нужны?
Я ранее показал пример. Ладно чёрт с ним.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13241 / 6873 / 1827
Регистрация: 18.10.2014
Сообщений: 17,420
03.09.2020, 02:39
Цитата Сообщение от Nexi99 Посмотреть сообщение
C++
1
2
3
4
5
6
7
char zx=12;
int Pomidor(...){
какой-то код
}
вызов 
 
Pomidor(zx);
Я знаю как получить доступ к стэку к zx но определить то что элемент занимает 1 байт я не могу.
Ничего не понятно. О каком "доступ к стэку к zx" идет речь? В примере zx - глобальная переменная. Какой "стэк"?

Цитата Сообщение от Nexi99 Посмотреть сообщение
в момент работы программы нет никаких таблицы это определяется в момент компиляции
Верно. В момент работы программы нет никаких таблицы. Все определяется в момент компиляции
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
03.09.2020, 02:47  [ТС]
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В примере zx - глобальная переменная. Какой "стэк"?
она может быть объявлена и локально.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
03.09.2020, 04:48
Цитата Сообщение от Nexi99 Посмотреть сообщение
int Pomidor(...)
Не занимайтесь ерундой.
C++
1
2
3
4
5
template<typename T>
int function(const T&value)
{
    return sizeof(value);
}
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
03.09.2020, 07:37
Цитата Сообщение от Nexi99 Посмотреть сообщение
Цитата Сообщение от politoto Посмотреть сообщение
sizeof - constant expression, но размер иногда нужно знать не только во время компиляции.
Так в том то и дело что у меня есть адрес и нужно знать размер элемента не на момент компиляции а когда программа будет в действии.
А типы элементов Вам известны во время выполнения программы?
Если известны, то sizeof (тип) даст искомый размер.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
05.09.2020, 22:50  [ТС]
Цитата Сообщение от politoto Посмотреть сообщение
А типы элементов Вам известны во время выполнения программы?
int Pomidor(...) здесь нет типов. Я беру первые 4ре байта и не знаю тип, здесь либо найти заранее через sizeof либо шаблон но его придётся через rainterpret_cast приводить либо регистрировать.Может через лет 10 20ть напишу свою функцию выделения памяти и там перед началом массива буду указывать тип.
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
05.09.2020, 23:35
Nexi99, где "здесь"? Ты берёшь непонятные 4 байта, и даже не знаешь откуда? Я слабо представляю, как такое может произойти. Далее, если ты прочитал 4 байта, зачем тебе sizeof? Чтобы узнать, что объём прочитанного - 4 байта? Ну так ты уже это знаешь. Если тебе ничего неизвестно об исходном типе данных в источнике, то у тебя нет никакого достоверного способа (очень формально говоря) аналитически этот тип определить. Смирись.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
05.09.2020, 23:56  [ТС]
Цитата Сообщение от Zirak Посмотреть сообщение
Nexi99, где "здесь"? Ты берёшь непонятные 4 байта, и даже не знаешь откуда? Я слабо представляю, как такое может произойти. Далее, если ты прочитал 4 байта, зачем тебе sizeof? Чтобы узнать, что объём прочитанного - 4 байта?
Я просто знаю это да и всё, я знаю откуда. Проблема в том что оно и не занимает 4 байта иногда может быть и больше но это не важно, но плохо то что указатели не регистрируются и я не знаю сколько он занимал изначально только в начале кода можно отследить путь. Да смерился создал глобальную переменную а что делать, просто я как то упустил что эта функция работает во время компиляции а дальше хоть о стену бейся. Некоторые языки такую информацию пишут вначале массива а вот перед переменными понятно такое писать не будешь перерасход памяти сильный.
0
76 / 68 / 10
Регистрация: 11.07.2016
Сообщений: 320
06.09.2020, 00:27
Nexi99, звучит как попытка решить несуществующую проблему. Если знаешь откуда, знаешь и что. Если не знаешь что, то тут наши полномочия всё. Сама идея пересылать какие-то идентификаторы перед данными звучит дико. Просто потому, что если ты знаешь с кем, чем и как ты обмениваешься, то в дополнительных идентификаторах нет нужды, если не знаешь, но знать необходимо - стандартизируй, в остальных случаях это пустая трата памяти, вычислительных ресурсов и пропускной способности канала.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
06.09.2020, 00:31  [ТС]
Мне просто интересно строить универсальные алгоритмы вот и всё. Добре ребята спасибо за информацию.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
06.09.2020, 00:38
Для начала стоит определиться насколько универсальные, и сформулировать это вербально и/или на бумаге.
0
 Аватар для COKPOWEHEU
4150 / 2728 / 433
Регистрация: 09.09.2017
Сообщений: 12,101
06.09.2020, 07:34
Напоминает задачу printf, когда надо отобразить неизвестно сколько неизвестно каких переменных. Там для этого используют форматную строку.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
06.09.2020, 08:45
Цитата Сообщение от Nexi99 Посмотреть сообщение
Я беру первые 4ре байта и не знаю тип, здесь либо найти заранее через sizeof либо шаблон но его придётся через rainterpret_cast приводить либо регистрировать.
Вы думали, что внутри Pomidor() можно как-то узнать с какими типами аргументов она была вызвана?
C++
1
2
3
4
5
6
7
8
9
10
char zx=12;
int Pomidor(...){
   return sizeof &Pomidor;
}
 
int e{Pomidor(zx)};
int d{Pomidor(7.777)};
int f{Pomidor(nullptr)}, g{Pomidor("two", "tree");
 
int main(){}
А чем не подошла для Вашей задачи универсальность шаблонов и перегрузки? Получили бы и alignof, и sizeof.
Вы бы чуть подробнее изложили Ваши предпочтения и технические ограничения, и обсуждение, глядишь, стало бы более продуктивным.

Цитата Сообщение от "Nexi99
Может через лет 10 20ть напишу свою функцию выделения памяти и там перед началом массива буду указывать тип.
Может быть, подобные функции уже написаны. И даже доступны в Вашей системе.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2020, 08:45

Как определить сколько памяти занимает список?
Есть список в нем содержаться переменные класса разных типов... Как посчитать программно сколько памяти на данный момент занимает...

Как JVM понимает, что определенный объект занимает определенное количество байтов памяти?
Мой иначальный вопрос следующий - почему существует различие в механизме примитивных и ссылочных переменных? Почему примитивные переменные...

Как узнать, сколько байтов памяти занимает массив
Я за Си сижу уже.. полчаса.. встала задача: узнать количество памяти, который занимает массив, память к которому я выделяю динамически...

Как узнать, в процесе отладки, сколько памяти занимает программа?
Вот чтобы проследить за тем сколько и когда программа занимает и какое количество килобайт под капие переменные.... Чтобы увидеть что...

Как узнать сколько памяти занимает таблица и каждый столбец в таблице
Как узнать сколько памяти занимает таблица и каждый столбец в таблице Access?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru