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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
TheChosenOne
13 / 13 / 1
Регистрация: 13.09.2013
Сообщений: 113
#1

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

21.04.2014, 01:15. Просмотров 373. Ответов 6
Метки нет (Все метки)

Почитал о программировании встроенных систем,там говорилось о фрагментации памяти. Например: Есть элемент типа int (4 байта) и массив типа char из 2х элементов (2 байта).Памяти у нас есть 6 кб. Размещаем там char. Схема размещения такова : -сh--- (где "-" - это свободные байты). После этого у нас образуются две дыры,в которые мы не можем поместить наше число (int) ? Борется ли с этим Ось ? Проблема возникает только во встроенных системах?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 01:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Фрагментация RAM (C++):

RAM, чтение и запись в RAM, Pointer ы - C++
Так! Начну сразу с проблемы. :) Допустим есть приложение "какая-то хрень.exe", а в нем есть переменная допустим "32" с типом...

Фрагментация памяти в С++ - C++
Есть длительно работающая программи интенсивно, работающая с памятью - выделяет освобождает, причем маленькими кусочками. Из-за этого всего...

Удаление антивируса из RAM - C++
Добрый вечер Форумчане, у меня появился следующий вопрос, как удалить из RAM антивирусник, обыкновенные проги я могу удалять, а к...

Тестирование RAM (оперативной памяти) - C++
Здравствуйте. Мне в задали курсовую работу на тему: Разработать DOS-программу, выполняющую тестирование RAM (оперативной памяти)....

Отсортировать ноутбуки по объему RAM - C++
В элементе списка содержатся данные о ноутбуке: *наименование; *цена; *тактовая частота процессора; *размер ОП. Создать второй...

Почему программа в Windows может использовать лишь 1792 мегабайта RAM? - C++
Простейшая программа, для того чтобы узнать сколько памяти можно использовать в системе. int main() { unsigned int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
21.04.2014, 05:50 #2
Во всех системах она возникает.
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.04.2014, 05:54 #3
Фрагментация возможна в любых системах. Другое дело, что с увеличением разрядности (и наличии виртуальной памяти) ситуация, связанная с невозможностью выделить память, сходит на нет. Однако для достижения оптимального доступа все же приходится использовать менеджер памяти.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.04.2014, 06:49 #4
Цитата Сообщение от TheChosenOne Посмотреть сообщение
После этого у нас образуются две дыры,в которые мы не можем поместить наше число (int)
Бред. Если ты сразу имеешь ячейки для инта и массива, то что бы ты не делал с массивом, на адреса, предназначенные для инта ты залезать не должен, а если залез, то вышел за пределы массива. Контролируй количество элементов и проблем не будет. Проблема в другом. Вот смотри есть у тебя структура, в которой два чара и инт, всего 6 байт и есть массив структур, чьи элементы из-за выравнивания занимают по 8 байт, тогда между каждыми двумя элементами и будет дыра. Ещё память может фрагментироваться при выделении и освобождении.

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

Фрагментация|Дефрагментация - Жесткие диски
Добрый день, локальный диск D (фрагментировано 2%), дефграментация не помогает, что делать?

фрагментация жесткого диска - Windows 7
вчера буквалюно проверял фрагментацию жесткого диска - 6%. Седня проверил - 2%. Что за фигня?О_о

Фрагментация оперативной памяти - Windows
Здравствуйте, подскажите пожалуйста в чем проблемы фрагментации оперативная памяти??как там что происходит и что там за проблемы с ней?

Большая фрагментация и незавершившаяся дефрагментация - Windows 7
Исходя из названия, спрошу: Что за бред? Согласно данным программы-дефрагментатора, фрагментированных файлов на диске С было на 35 гигов....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.04.2014, 18:26
Ответ Создать тему
Опции темы

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