Форум программистов, компьютерный форум CyberForum.ru

Фрагментация RAM - C++

Восстановить пароль Регистрация
 
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
21.04.2014, 01:15     Фрагментация RAM #1
Почитал о программировании встроенных систем,там говорилось о фрагментации памяти. Например: Есть элемент типа int (4 байта) и массив типа char из 2х элементов (2 байта).Памяти у нас есть 6 кб. Размещаем там char. Схема размещения такова : -сh--- (где "-" - это свободные байты). После этого у нас образуются две дыры,в которые мы не можем поместить наше число (int) ? Борется ли с этим Ось ? Проблема возникает только во встроенных системах?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4441 / 3779 / 1278
Регистрация: 14.04.2014
Сообщений: 14,872
21.04.2014, 05:50     Фрагментация RAM #2
Во всех системах она возникает.
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.04.2014, 05:54     Фрагментация RAM #3
Фрагментация возможна в любых системах. Другое дело, что с увеличением разрядности (и наличии виртуальной памяти) ситуация, связанная с невозможностью выделить память, сходит на нет. Однако для достижения оптимального доступа все же приходится использовать менеджер памяти.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.04.2014, 06:49     Фрагментация RAM #4
Цитата Сообщение от TheChosenOne Посмотреть сообщение
После этого у нас образуются две дыры,в которые мы не можем поместить наше число (int)
Бред. Если ты сразу имеешь ячейки для инта и массива, то что бы ты не делал с массивом, на адреса, предназначенные для инта ты залезать не должен, а если залез, то вышел за пределы массива. Контролируй количество элементов и проблем не будет. Проблема в другом. Вот смотри есть у тебя структура, в которой два чара и инт, всего 6 байт и есть массив структур, чьи элементы из-за выравнивания занимают по 8 байт, тогда между каждыми двумя элементами и будет дыра. Ещё память может фрагментироваться при выделении и освобождении.

Добавлено через 31 минуту
И не -ch---, а ----ch-, либо -ch------: инт равняется на границу 4-х байт. В крайнем случае -ch----, если всё целиком не образует единую структуру и не равняется на границу 8-ми байт, тогда чары равняются на границу одного байта, да и то аппаратно, и могут начинаться с не кратного 4-м адреса.
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
21.04.2014, 17:45  [ТС]     Фрагментация RAM #5
taras atavin, тут -ch--- каждый из символов "с" и "h" занимает по одному байту
Цитата Сообщение от taras atavin Посмотреть сообщение
Ещё память может фрагментироваться при выделении и освобождении.
Вот,я про это и говорю...
Tulosba, т.е. в современных Осях менеджер памяти справляется с этим (в Windows память же виртуальная вроде бы... )?
Tulosba
:)
Эксперт С++
4382 / 3225 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
21.04.2014, 17:53     Фрагментация RAM #6
TheChosenOne, имеется в виду свой менеджер внутри программы. Скажем когда нужно часто выделять/освобождать много небольших объектов, то как для исключения фрагментации, так и для минимизации системных вызовов выделения/освобождения памяти пишется свой аллокатор, который размещает объекты в заранее выделенной памяти, в ячейках для удобства/возможности хранения всех потенциальных элементов данных.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2014, 18:26     Фрагментация RAM
Еще ссылки по теме:

Фрагментация страниц Blob-типом
C++ Тестирование RAM (оперативной памяти)
SSD Почему происходит фрагментация SSD?
Windows 7 Большая фрагментация и незавершившаяся дефрагментация
Я выполняю дефрагментацию, а пишется, что выполняется фрагментация. Ошибка ли это? Windows 7

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.04.2014, 18:26     Фрагментация RAM #7
Цитата Сообщение от TheChosenOne Посмотреть сообщение
тут -ch--- каждый из символов "с" и "h" занимает по одному байту
А минус в начале тогда что? ch------, или -----ch. Если чары не выровнены, тогда ch----. Как ни крути в статике ты не залезешь, кроме как выходом за границы массива.
Yandex
Объявления
21.04.2014, 18:26     Фрагментация RAM
Ответ Создать тему
Опции темы

Текущее время: 01:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru