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

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

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

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

Вопрос: Как можно (или нужно) выделить память размером в 1024 ячейки и вывести его внутренний адрес ?? (опишите пожалуйста эту часть кода). А после выполнения всех действий нужно освободить память (внутри 1024 ячеек), которая была выделена под эту переменную.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2012, 19:08
Ответы с готовыми решениями:

Записать дополнительный код содержимого 16 ячеек памяти, начиная с адреса 910. Результаты занести в ячейки памяти, н
Записать дополнительный код содержимого 16 ячеек памяти, начиная с адреса 910. Результаты занести в...

Извлечь число из адреса ячейки памяти А1
Извлечь число из адреса ячейки памяти А1, выполнить определенную операцию и записать результат...

Перенести таблицу кодов из памяти программ в ОЗУ. Таблица имеет разрядность 16 байт и размещается в памяти программ
Перенести таблицу кодов из памяти программ в ОЗУ. Таблица имеет разрядность 16 байт и размещается в...

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

7
go
Эксперт С++
3639 / 1371 / 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
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
25.02.2012, 19:58  [ТС] 3
А вот этот макрос CELL он просто заменяется на 8 правильно я понимаю ?
0
go
Эксперт С++
3639 / 1371 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
25.02.2012, 20:02 4
Цитата Сообщение от Shooroop Посмотреть сообщение
но CELL - это тип ,который мы сами определили или как ?
Нет. Вообще это вроде константы. (директива препроцессора, везде вместо CELL будет подставляться число 8). Я использую для задания размера одной ячейки.
1
0 / 1 / 0
Регистрация: 12.12.2011
Сообщений: 23
25.02.2012, 20:14  [ТС] 5
Да спасибо я понял. А вот как внутри этих ячеек "выделить"(просто указать,что они заняты) отдельные ячейки под переменную и вывести её машинный адрес ?
0
Псевдослучайный
1934 / 1135 / 96
Регистрация: 13.09.2011
Сообщений: 3,204
25.02.2012, 20:30 6
Делаешь список выделенных блоков с указанием смещения и длинны, при запросе на выделение памяти ищешь первый свободный кусок достаточного размера. В адрес переводится банально:
C
1
2
char *base = malloc(8 * size);
void *addr = base + offset * 8;
1
go
Эксперт С++
3639 / 1371 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
25.02.2012, 21:18 7
Цитата Сообщение от Shooroop Посмотреть сообщение
А вот как внутри этих ячеек "выделить"(просто указать,что они заняты) отдельные ячейки под переменную
Если занимаете не подряд идущие ячейки, то необходимо "помечать", те что заняты. Иначе можно использовать, например, число занятых блоков.

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

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как заставить программу принимать цепочку байт из оперативной памяти, в виде массива байт ?
В памяти процесса есть закодированный блок с байтами, есть адрес этого блока и размер. Есть так-же...

Функция должна вывести cnt битов, расположенных в памяти, начиная с адреса addr
дана функция: void dump(void* addr, int cnt); Функция должна вывести cnt битов, расположенных в...

В поле дампа памяти вывести на экран содержимое данной памяти [bx+di]
Имеется функция IDIV word ptr . Но предварительно мы записываем значение в данную область памяти...

Вводить различные символы и вывести вид их ячейки в оперативной памяти в двоичном коде
Напишите программу, которая демонстрирует представления любого символа в памяти компьютера....


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

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

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