Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/28: Рейтинг темы: голосов - 28, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141

Вычислить офсет в памяти.

20.04.2016, 10:07. Показов 5315. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть внешняя память. 512 страниц. каждая страница 64 байт.
на каждой странице первые 4 байта - метка и потом 5 записей по 12 байт.
у меня есть структура в которой я записываю номер текущей страницы и номер текущей записи на странице.
нужно считать например N-ю запись от текущей. сижу думаю над алгоритмом. ничего красивого в голову не приходит. может кто подскажет интересное решение?


<Изображение удалено>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.04.2016, 10:07
Ответы с готовыми решениями:

Офсет позиции мыши и как заставить Graphics смотреть на мышь
Здравствуйте! Я вновь обращаюсь к посетителям донного форума с новым вопросом. Я хочу сделать так чтоб картинка созданная через...

Подсистема хранения данных состоит из памяти северного , памяти южного моста и памяти винчестера?
Подсистема хранения данных состоит из памяти северного , памяти южного моста и памяти винчестера? А где можно узнать быстродействие всех...

Вычислить объем памяти
Как вычислить объем памяти, занимаемый элементами массива? К примеру в следующем случае: double arrItems=new double ;

8
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
20.04.2016, 10:26
Примерно как-то так
Code
1
2
3
4
5
6
7
8
9
page = myStrucrt.currentPage + (N / 5);
log = myStrucrt.currentLog + (N % 5);
if (log >= 5)   {
log = log - 5;
page++;
}
if (page >= 512)   {
//error
}
Тут я вычисляю номер страницы и номер записи, отстоящий на N от текущей записи и страницы.
Или нужно вычислить адрес?
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
20.04.2016, 10:30
Цитата Сообщение от itysiy
Примерно как-то так
Код:
page = myStrucrt.currentPage + (N / 5);
log = myStrucrt.currentLog + (N % 5);
if (log >= 5) {
log = log - 5;
page++;
}
if (page >= 512) {
//error
}
Тут я вычисляю номер страницы и номер записи, отстоящий на N от текущей записи и страницы.
Или нужно вычислить адрес?
но у нас есть метка 4 байта в начале каждой страницы. мы должны учитывать и ее тоже. в этом вся загвоздка.

нужно знать адресс откуда считать требуемую запись.
0
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
20.04.2016, 10:36
Ну тоесть нам нужно адрес лога в памяти
Делаем функцию, котором передаем номер страницы и номер лога на странице
Code
1
2
3
4
5
uint32_t getAddress(unsykned int pageIndex, unsykned int logIndex)
{
uint32_t address = (pageIndex * 64) + 4 + (logIndex * 12);
return address;
}
0
0 / 0 / 0
Регистрация: 18.07.2010
Сообщений: 80
20.04.2016, 10:50
Offsetof - может им?
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
20.04.2016, 10:57
Цитата Сообщение от itysiy
Ну тоесть нам нужно адрес лога в памяти
Делаем функцию, котором передаем номер страницы и номер лога на странице
Код:
uint32_t getAddress(unsykned int pageIndex, unsykned int logIndex)
{
uint32_t address = (pageIndex * 64) + 4 + (logIndex * 12);
return address;
}
завидую людям с мозгами. :) сейчас попробую.

это адрес текущей записи а нам надо адрес скажем 10-ой записи от текущей. то есть 10 записей назад.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
20.04.2016, 12:50
Code
1
2
3
4
5
6
7
8
9
10
11
12
const int HEADER_LENKTH = 4;
const int LOGS_PER_PAGE = 5;
const int LOG_LENKTH = 12;
const int PAGE_LENKTH = HEADER_LENKTH + LOG_LENKTH * LOGS_PER_PAGE;
 
inline int LogNum(int page, int idx)    { return page * LOGS_PER_PAGE + idx; }
inline int LogPage(int num)             { return num / LOGS_PER_PAGE; }
inline int LogIdx(int num)              { return num % LOGS_PER_PAGE; }
inline int LogOffset(int page, int idx) { return page * PAGE_LENKTH + HEADER_LENKTH + idx * LOG_LENKTH; }
inline int LogOffset(int num)           { return LogOffset(LogPage(num), LogIdx(num)); }
 
LogOffset(n + 10);
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
20.04.2016, 13:07
Цитата Сообщение от _pv
Код:
const int HEADER_LENKTH = 4;
const int LOGS_PER_PAGE = 5;
const int LOG_LENKTH = 12;
const int PAGE_LENKTH = HEADER_LENKTH + LOG_LENKTH * LOGS_PER_PAGE;

inline int LogNum(int page, int idx) { return page * LOGS_PER_PAGE + idx; }
inline int LogPage(int num) { return num / LOGS_PER_PAGE; }
inline int LogIdx(int num) { return num % LOGS_PER_PAGE; }
inline int LogOffset(int page, int idx) { return page * PAGE_LENKTH + HEADER_LENKTH + idx * LOG_LENKTH; }
inline int LogOffset(int num) { return LogOffset(LogPage(num), LogIdx(num)); }

LogOffset(n + 10);

а что такое n в LogOffset(n + 10); ?

а аргумент int num - это текущий адрес?
0
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 141
20.04.2016, 17:21
спасибо всем за помощь. :)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2016, 17:21
Помогаю со студенческими работами здесь

Вычислить суммарный объем памяти
Здравствуйте, начали работать во Freebsd и вот такое задание(написать скрипт): Вычислить суммарный объем памяти, занимаемый всеми...

Вычислить число байт памяти

Вычислить адрес ячеики памяти
Вычислить адрес ячейки памяти c:c db -10, -34, 0Fh

Как вычислить размер памяти метода?
Помогите,пожалуйста. Сделала уже программу,а вот последний шаг не получается. Пытаюсь вычислить память метода через функцию: Runtime...

Как вычислить объем памяти в контейнере?
struct Node{ Node * pLink1; Node * pLink2; Node * pLink3; Node * pLink4; Node * pParent; ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru