|
|
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
чуть напутал Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 15:02 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima TМожно просто по адресу получить номер записи, изменить номер и получить обратно адрес Код: sql 1. 2. 3. работает. не понимаю как но работает. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 15:08 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima Tчуть напутал Код: sql 1. предыдущий вариант как раз работал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 15:11 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7Dima TМожно просто по адресу получить номер записи, изменить номер и получить обратно адрес Код: sql 1. 2. 3. работает. не понимаю как но работает. :) неправильно работает, я 4 байта на заголовок 0-й страницы не учел. Т.е. при номер = 0 адрес будет 4, а тут 0. Так правильно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 15:16 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7пропущено... работает. не понимаю как но работает. :) неправильно работает, я 4 байта на заголовок 0-й страницы не учел. Т.е. при номер = 0 адрес будет 4, а тут 0. Так правильно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. спасибо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 15:37 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
кстати а как мне красиво найти количество записанных записей? сейчас я делаю так. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:06 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Писал уже что телепатов тут нет. Пиши понятнее. loggerParam.lognum и loggerParam.page что в них хранится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:14 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima TПисал уже что телепатов тут нет. Пиши понятнее. loggerParam.lognum и loggerParam.page что в них хранится? loggerParam.page - номер текущей страницы. loggerParam.lognum - номер текущей записи на странице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:17 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Если нумерация с нуля, то достаточно Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:22 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima TЕсли нумерация с нуля, то достаточно Код: sql 1. ой. действительно. у меня нумерация с нуля. но +1 не надо. я уже на текущей записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:29 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Меня вот в школе учили что любая формула содержит греческие, латинские буквы в виде условных обозначений, а потом внизу - расшифровка что есть что. Если букв не хватает - воодятся верхние и нижние индексы и штрихи. Пример. Закон Ома. Где: I - ток в Амперах U - напряжение в Вольтах R - сопротивление в Омах. Красиво. Лаконично. Строго. Странно но для современного инженера-айтишника подобная система обозначений представляется чем-то немыслимо трудным или просто недоступным для понимания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:37 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
jenya7ой. действительно. у меня нумерация с нуля. но +1 не надо. я уже на текущей записи. Если под текущей подразумевается следующая пустая (куда писать в следующий раз), то +1 не надо. PS Учись четче формулировать свои мысли. Нет тут телепатов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:41 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
maytonМеня вот в школе учили что любая формула содержит греческие, латинские буквы в виде условных обозначений, а потом внизу - расшифровка что есть что. Если букв не хватает - воодятся верхние и нижние индексы и штрихи. Пример. Закон Ома. Где: I - ток в Амперах U - напряжение в Вольтах R - сопротивление в Омах. Красиво. Лаконично. Строго. Странно но для современного инженера-айтишника подобная система обозначений представляется чем-то немыслимо трудным или просто недоступным для понимания. а что именно коробит ваш глаз? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:43 |
|
||
|
Вычислить офсет в памяти в С.
|
|||
|---|---|---|---|
|
#18+
Dima Tjenya7ой. действительно. у меня нумерация с нуля. но +1 не надо. я уже на текущей записи. Если под текущей подразумевается следующая пустая (куда писать в следующий раз), то +1 не надо. PS Учись четче формулировать свои мысли. Нет тут телепатов. то есть я делаю немного по другому. я записываю в память и потом инкрементирую loggerParam.lognum++ подготавливая к следующей записи. у меня первая запись 1 а не ноль. мне так удобней потом. поэтому нужно даже так total_logs = (loggerParam.page * LOGS_PER_PAGE) + (loggerParam.lognum-1); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2016, 16:50 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1340735]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
2ms |
| others: | 229ms |
| total: | 420ms |

| 0 / 0 |
