Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564

Реальная затрачиваемая память в динамике

15.09.2016, 06:30. Показов 1400. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Динамическое выделение памяти.. допустим есть:
C++
1
int *ivar=new int[255] ;
Поидее при выделении должно выделиться 255*4 байт памяти, однако при использовании delete программа заведомо знает данный размер (255*4), а значит этот размер где то хранится. Так вот, для хранения размера чисто логически - значит положена ещё одна переменная. (при этом подозреваю, что при 32б архитектуре эта переменная будет 4 байтной, т.к. в 4 байта влазиет адрес максимума 4ГБ, соответственно в 64б арх. - переменная будет 8 байтной).
Ну и получается, что по крайней мере помимо 255*4 байт, выделяется ещё 4 байта, которые будут хранить размер. Но ведь и это по сути может быть не предел, может там есть ещё какие то необходимые поля.
Может кто знает, или где почитать? (т.к. ссылки на другие сайты запрещены, можете выложить ключевую фразу для гугла или яндекса, чтоб сразу найти)

Почему собственно данный вопрос возник.. Сижу разбираю статью о кастомных аллокаторах ("Альтернативные аллокаторы памяти" на хабре), где достаточно интересно представленны манипуляции с выделением памяти.. при использовании обычных аллокаторов new и calloc никогда и не задумываешся о том, что же на самом деле происходит "внутри", а ведь это достаточно интересно).

Так вот, и подумалось.. а зачем собственно нам нужны все эти union'ы и варианты, где вечно встаёт вопрос о "неиспользуемой памяти" при выделении памяти для POD типов меньших размеров чем сами структуры. Не проще ли было бы использовать указатель смещения, в место того, чтоб полагаться на устройство ОС в отношении выделяемых объектов.
Имею ввиду что то типа переменной uint8_t *mem в примере из статьи:
C++
1
2
3
4
5
typedef struct _LinearBuffer {
uint8_t *mem;       /*!< Pointer to buffer memory. */
uint32_t totalSize; /*!< Total size in bytes. */
uint32_t offset;    /*!< Offset. */
} LinearBuffer;
А если мы можем сами контролировать реальные размер памяти, то и меньше проблем было бы с размером и фрагментацией.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.09.2016, 06:30
Ответы с готовыми решениями:

PaintBox в динамике
Привет всем! Изучая компонент Paintbox, возник вопрос - как можно применить ему следующие моменты: 1. размеры больше клиентских 2....

Задача по динамике
Помогите, пожалуйста, с решением этой задачи. Я с таким сталкиваюсь впервые. Думал, что можно решить через систему или найти производную,...

Задача по динамике
Доброго дня, Сижу ломаю голову с задачей, не знаю как и с чего начать (в динамике плыву очень сильно). Внизу прикреплю фотографию...

21
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
18.09.2016, 22:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Izual Посмотреть сообщение
Поидее при выделении должно выделиться 255*4 байт памяти, однако при использовании delete программа заведомо знает данный размер (255*4), а значит этот размер где то хранится.
Какой вы сообразительный!
Во многих реализациях new и delete вызывают malloc и free из libc. А libc действительно, хранит размеры всех выделяемых блоков и при необходимости запрашивает память у ядра ОС.
Но теоретически возможна реализация new и delete, когда компилятор зарание берет у системы блок памяти определенного размера, и тогда известные на стадии компиляции размеры блоков можно и не хранить. Это, насколько я понимаю, вам и пытались втолковать.
Цитата Сообщение от Izual Посмотреть сообщение
Но ведь и это по сути может быть не предел, может там есть ещё какие то необходимые поля.
Да, ваша интуиция впечатляет. Дествительно, многие реализации libc в конце выделенного блока добавляют информацию для контроля переполнения. Впрочем, вам об этом уже тоже сказали.
Цитата Сообщение от Izual Посмотреть сообщение
Может кто знает, или где почитать?
Читать лучше оригиналы. В данном случае это исходники malloc и free из libc. Многие из них (напр. glibc) открыты. Читайте и просвещайтесь.
Цитата Сообщение от Izual Посмотреть сообщение
А если мы можем сами контролировать реальные размер памяти, то и меньше проблем было бы с размером и фрагментацией.
Если словом "мы" вы обозначаете себя, то, думаю, проблем будет больше.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
18.09.2016, 22:53  [ТС]
Цитата Сообщение от gng Посмотреть сообщение
Но теоретически возможна реализация new и delete, когда компилятор зарание берет у системы блок памяти определенного размера, и тогда известные на стадии компиляции размеры блоков можно и не хранить. Это, насколько я понимаю, вам и пытались втолковать.
Хмм.. тема была о другом и обсуждалось другое.. ну да ладно
Цитата Сообщение от gng Посмотреть сообщение
Если словом "мы" вы обозначаете себя, то, думаю, проблем будет больше.
не ссуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.09.2016, 22:53

Определить время и путь, пройденный дрезиной
Здравствуйте, помогите пожалуйста решит следующий задачу Дрезина массы m = 500 кг движется по горизонтальному прямолинейному участку...

PaintBox в динамике 2
Здравствуйте, уважаемые жители форума. Некоторое время назад мною был заданы вопросы по теме &quot;PaintBox в динамике&quot;, который...

Отчет по динамике
Добрый день. Подскажите как лучше сделать отчет по динамике показателей от недели к недели? Это данные за 1 неделю:...

Определить силу, действующую на стержень
Как решать эту задачу?

Обьект в динамике
Всем привет ! Скажите пожалуйста , есть ли необходимость перем. х класса Miva ложить в динамическую память если обьект класса...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru