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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Shooroop
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
25.02.2012, 19:08     Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти)) #1
Вот тут появилась такая интересная задача: требуется сделать программу которая управляет 1024 ячейками памяти по 8 байт каждая. т.е. за каждый запрос памяти выделяется память, кратная 8-ми байтам, даже если нужно выделить ,допустим 3 байта(5 байтов остается свободным). память выделяется под переменные типов: int,short in , double. (пользователь сам выбирает тип). нужно вывести сколько ячеек памяти выделено, сколько памяти выделено, машинный адрес выд. участка памяти, и ВНУТРЕННИЙ АДРЕС выделенного участка памяти (применимо к 1024 ячейкам).

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

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

Добавлено через 1 минуту
Цитата Сообщение от Shooroop Посмотреть сообщение
и вывести её машинный адрес ?
C
1
2
ptr; // Адрес первой
ptr + 1 * CELL; // Адрес второй
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 23:16     Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))
Еще ссылки по теме:

C++ Вывести значения элементов массива и их адреса в памяти
C++ Менеджер сегментированной памяти
Узнать адреса памяти C++

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

Или воспользуйтесь поиском по форуму:
Shooroop
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
25.02.2012, 23:16  [ТС]     Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти)) #8
Спасибо , чуток разобрался!
Yandex
Объявления
25.02.2012, 23:16     Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))
Ответ Создать тему
Опции темы

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