|
|
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Есть внешняя память. 512 страниц. каждая страница 64 байт. на каждой странице первые 4 байта - метка и потом 5 записей по 12 байт. у меня есть структура в которой я записываю номер текущей страницы и номер текущей записи на странице. нужно считать например N-ю запись от текущей. сижу думаю над алгоритмом. ничего красивого в голову не приходит. может кто подскажет интересное решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 08:56 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Как-то так Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 09:11 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima TКак-то так Код: plaintext 1. 2. 3. 4. 5. так мы знаем страницу а нужно знать адресс откуда считать требуемую запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 09:21 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7так мы знаем страницу а нужно знать адресс откуда считать требуемую запись. Что значит адрес? Я тебе показал как получить номер страницы и номер записи на странице. Это не адрес? Пиши подробнее, телепатов тут нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 09:27 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7так мы знаем страницу а нужно знать адресс откуда считать требуемую запись. Что значит адрес? Я тебе показал как получить номер страницы и номер записи на странице. Это не адрес? Пиши подробнее, телепатов тут нет. например мы находимся на 4-ой странице 2-я запись тогда текущий адресс 192+4+12+12=220 и мы хотим получить адресс 10-ой записи от текущей 10*12 +4 +4 = 128 => 220-128= 92 у меня не получается по вашему алгоритму. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 09:39 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7например мы находимся на 4-ой странице 2-я запись тогда текущий адресс 192+4+12+12=220 и мы хотим получить адресс 10-ой записи от текущей 10*12 +4 +4 = 128 => 220-128= 92 у меня не получается по вашему алгоритму. Давай сначала, вот что я понял из написанного: 1. Адрес - это просто абсолютный адрес в памяти (без учета страниц и т.д.), т.е. просто указатель на структуру. Так? 2. Страницы в памяти располагаются последовательно друг за другом? Так? 3. "адрес 10-ой записи от текущей" почему "220-128" а не "220+128"? Назад чтоли смещаться надо? Всегда назад или вперед тоже надо? ЗЫ пиши правильно: "адрес" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 09:53 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
И распиши что ты там реально хранишь: адрес (220 в твоем примере) или страницу (4) с номером на странице (2)? От чего считать смещение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 09:56 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7например мы находимся на 4-ой странице 2-я запись тогда текущий адресс 192+4+12+12=220 и мы хотим получить адресс 10-ой записи от текущей 10*12 +4 +4 = 128 => 220-128= 92 у меня не получается по вашему алгоритму. Давай сначала, вот что я понял из написанного: 1. Адрес - это просто абсолютный адрес в памяти (без учета страниц и т.д.), т.е. просто указатель на структуру. Так? 2. Страницы в памяти располагаются последовательно друг за другом? Так? 3. "адрес 10-ой записи от текущей" почему "220-128" а не "220+128"? Назад чтоли смещаться надо? Всегда назад или вперед тоже надо? ЗЫ пиши правильно: "адрес" да вы поняли правильно - 220 это текущий адрес - абсолютный адрес в памяти. 92 - это адрес записи которую нам нужно считать (10-я запись от последней). считывать можно только предидущие записи так как мы находимся на последней записи. впереди записей еще нет мы можем взять только записи которые уже записаны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 10:06 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7нужно считать например N-ю запись от текущей. сижу думаю над алгоритмом. ничего красивого в голову не приходит. может кто подскажет интересное решение? Н-да. Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 10:21 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Так подойдет? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. деление на 64 можно заменить на сдвиги (addr >> 6), но это компиляторы сами делают. Если offset часто бывает большой (от 30-50 записей) то есть смысл немного оптимизировать цикл, т.е. не по одной странице смещаться, а сразу посчитать на сколько. Если в основном небольшой то лучше так оставить, меньше вычислений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 10:27 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
softwarerjenya7нужно считать например N-ю запись от текущей. сижу думаю над алгоритмом. ничего красивого в голову не приходит. может кто подскажет интересное решение? Н-да. Код: sql 1. 2. 3. 4. новый номер страницы получается больше чем текущий. такого быть не может. страницы перед последней записи пусты. взять можно записи уже записанные - то есть взади. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 10:38 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7, ты на это не ответил 19086473 . Что из чего считаем? Как понимаю на выходе абсолютный адрес, на входе смещение и ... что? текущий адрес или текущая страница и номер на странице? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 10:47 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Чуть допилил получение адреса по адресу и смещению. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 10:50 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima TЧуть допилил получение адреса по адресу и смещению. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. вау. оба варианта работают. громадное спасибо. завидую людям с мозгами. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 11:00 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7новый номер страницы получается больше чем текущий. такого быть не может. страницы перед последней записи пусты. взять можно записи уже записанные - то есть взади. Попробуйте нанять программиста Попробуйте нанять аналитика писать ТЗ Попробуйте нанять учителя русского языка Попробуйте подать туда отрицательное смещение 1 . 1 Хз как определено деление с остатком для отрицательных в вашем компиляторе, а за исключением этого должно прокатить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 11:03 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7, ты на это не ответил 19086473 . Что из чего считаем? Как понимаю на выходе абсолютный адрес, на входе смещение и ... что? текущий адрес или текущая страница и номер на странице? это микросхема памяти - по адресу лежат данные - скажем 10-я запись от текущей - адресс записи - 92 – тут лежит первый байт записи – 92+12 - тут последний байт записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 11:05 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7скажем 10-я запись от текущей Смещение 10*12 + 4*(10 / 5) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 14:12 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovjenya7скажем 10-я запись от текущей Смещение 10*12 + 4*(10 / 5) Это верно только при смещении кратном 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 14:19 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovjenya7скажем 10-я запись от текущей Смещение 10*12 + 4*(10 / 5) да! гениально! общая длина записей + длина меток. Теперь текущий адрес - смещение и мы получили адрес требуемой записи. большое спасибо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 14:27 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima TDimitry Sibiryakovпропущено... Смещение 10*12 + 4*(10 / 5) Это верно только при смещении кратном 5. если количество записей будет не 5 а 3 по идее тоже будет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 14:34 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7Dima Tпропущено... Это верно только при смещении кратном 5. если количество записей будет не 5 а 3 по идее тоже будет работать. кстати если на странице остается пустое место его также можно добавить в вычисление как количество меток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 14:37 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7Dima Tпропущено... Это верно только при смещении кратном 5. если количество записей будет не 5 а 3 по идее тоже будет работать. при смещении на 3 можем как остаться на текущей странице, так и перейти на соседнюю. Смотря в какой части страницы находимся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 14:39 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7пропущено... если количество записей будет не 5 а 3 по идее тоже будет работать. при смещении на 3 можем как остаться на текущей странице, так и перейти на соседнюю. Смотря в какой части страницы находимся. нужно добавить заглушку на страницу или сделать запись 20 байт. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 14:45 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Можно просто по адресу получить номер записи, изменить номер и получить обратно адрес Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 15:00 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39221257&tid=1340735]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
92ms |
get tp. blocked users: |
2ms |
| others: | 243ms |
| total: | 561ms |

| 0 / 0 |
