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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Shooroop
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
#1

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

25.02.2012, 19:08. Просмотров 1545. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти)) (C++):

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

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

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

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

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

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

7
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
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
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
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
Псевдослучайный
1764 / 1107 / 73
Регистрация: 13.09.2011
Сообщений: 3,148
25.02.2012, 20:30 #6
Делаешь список выделенных блоков с указанием смещения и длинны, при запросе на выделение памяти ищешь первый свободный кусок достаточного размера. В адрес переводится банально:
C
1
2
char *base = malloc(8 * size);
void *addr = base + offset * 8;
1
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
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? - C++
Если моя программа допускает кучу memory leaks - ов, то после закрытия процесса программы утерянная (утёкшая) память будет так же...

Узнать адреса памяти - C++
Всем привет! Не знал в какой теме разместить, разместил тут. Как узнать адреса памяти? Тоесть есть определённая программа(в...

Проверка расположения последовательности байт числа в памяти - C++
Проверка расположения последовательности байт числа в памяти (должна возвращать динамически созданный массив, в котором содержатся байты...

Проверка доступности адреса памяти - C++
Как проверить можно ли прочитать по указанному адресу , что либо ?


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

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

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