Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Shooroop
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
1

Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))

25.02.2012, 19:08. Просмотров 1673. Ответов 7
Метки нет (Все метки)

Вот тут появилась такая интересная задача: требуется сделать программу которая управляет 1024 ячейками памяти по 8 байт каждая. т.е. за каждый запрос памяти выделяется память, кратная 8-ми байтам, даже если нужно выделить ,допустим 3 байта(5 байтов остается свободным). память выделяется под переменные типов: int,short in , double. (пользователь сам выбирает тип). нужно вывести сколько ячеек памяти выделено, сколько памяти выделено, машинный адрес выд. участка памяти, и ВНУТРЕННИЙ АДРЕС выделенного участка памяти (применимо к 1024 ячейкам).

Вопрос: Как можно (или нужно) выделить память размером в 1024 ячейки и вывести его внутренний адрес ?? (опишите пожалуйста эту часть кода). А после выполнения всех действий нужно освободить память (внутри 1024 ячеек), которая была выделена под эту переменную.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.02.2012, 19:08
Ответы с готовыми решениями:

Вывести значения элементов массива и их адреса в памяти
Поставьте комментарии рядом с каждой строчкой :) Задача:составить программу...

Менеджер памяти
Доброго времени суток. Столкнулся с такой проблемой... Необходимо написать...

Менеджер памяти
Хочу написать свои аналоги malloc free. Загвоздка в том, что я не знаю как...

Менеджер памяти
Пишу менеджер памяти и возник вопрос насчет реализации free. Как бы из функции...

Менеджер сегментированной памяти
Добрый вечер. Очень нужна помощь. Есть менеджер сегментированной памяти. Все...

7
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
25.02.2012, 19:22 2
C
1
2
3
4
5
6
7
#include <stdlib.h>
 
#define CELL 8
 
/* ... */
int size = 1024;
void *ptr = malloc(CELL * size);
Так пробовали?
1
Shooroop
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
25.02.2012, 19:58  [ТС] 3
А вот этот макрос CELL он просто заменяется на 8 правильно я понимаю ?
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
25.02.2012, 20:02 4
Цитата Сообщение от Shooroop Посмотреть сообщение
но CELL - это тип ,который мы сами определили или как ?
Нет. Вообще это вроде константы. (директива препроцессора, везде вместо CELL будет подставляться число 8). Я использую для задания размера одной ячейки.
1
Shooroop
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
25.02.2012, 20:14  [ТС] 5
Да спасибо я понял. А вот как внутри этих ячеек "выделить"(просто указать,что они заняты) отдельные ячейки под переменную и вывести её машинный адрес ?
0
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,178
25.02.2012, 20:30 6
Делаешь список выделенных блоков с указанием смещения и длинны, при запросе на выделение памяти ищешь первый свободный кусок достаточного размера. В адрес переводится банально:
C
1
2
char *base = malloc(8 * size);
void *addr = base + offset * 8;
1
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
25.02.2012, 21:18 7
Цитата Сообщение от Shooroop Посмотреть сообщение
А вот как внутри этих ячеек "выделить"(просто указать,что они заняты) отдельные ячейки под переменную
Если занимаете не подряд идущие ячейки, то необходимо "помечать", те что заняты. Иначе можно использовать, например, число занятых блоков.

Добавлено через 1 минуту
Цитата Сообщение от Shooroop Посмотреть сообщение
и вывести её машинный адрес ?
C
1
2
ptr; // Адрес первой
ptr + 1 * CELL; // Адрес второй
1
Shooroop
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
25.02.2012, 23:16  [ТС] 8
Спасибо , чуток разобрался!
0
25.02.2012, 23:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 23:16

Как написать менеджер памяти
помогите написать менеджер памяти на с++

Освобождает ли память процесса менеджер памяти Windows?
Если моя программа допускает кучу memory leaks - ов, то после закрытия процесса...

Узнать адреса памяти
Всем привет! Не знал в какой теме разместить, разместил тут. Как узнать...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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