Функция проверки памяти

Тема в разделе "WASM.A&O", создана пользователем Voodoo, 11 дек 2006.

  1. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    Нужна функция проверки памяти на сбои на С. Это просто, но есть ограничение - нужно обойтись без сравнения с эталонной областью. При этом нужна оптимизация по скорости - объем памяти = вся RAM. Я попытался сделать самое простое - записать значение, тут же считать, проверить - компилятор удалил проверку, считая ее всегда проходящейся. Подскажите, плз.
     
  2. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Напиши на inline asm
     
  3. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    gilg
    я б это уже давно сделал, но... Функция будет вставлена в кроссплатформенную часть ядра freebsd. inline asm - это совсем на крайний случай.
     
  4. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Шибко умные эти компиляторы стали :)
    Такая идея:
    Код (Text):
    1. addr = BaseAddr;
    2. *addr = TestValue;
    3. for (; addr < EndAddr; ++addr) {
    4.     if (*(addr-1) != TestValue) {
    5.         break;
    6.     }
    7.     *addr = TestValue;
    8. }
    Visual с этой штукой не догадался ничего сотворить :))

    ЗЫ: Кстати, такая проверка ОП будет бессмысленной. Посмотри http://www.memtest86.com/#philo
     
  5. v_mirgorodsky

    v_mirgorodsky New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    53
    Для таких случаев и придумали ключевое слово volatile. Сейчас точно уже не вспомню порядок слов в объявлении, но должно быть нечто из разряда:
    Код (Text):
    1. volatile unsigned long *p;
    2. или
    3. unsigned long volatile *p;
     
  6. Voodoo

    Voodoo New Member

    Публикаций:
    0
    Регистрация:
    9 апр 2003
    Сообщения:
    297
    Адрес:
    Новосибирск
    v_mirgorodsky
    Спасибо, посмотрю.
    Да, работает как надо.
    gilg
    Занятно. Но ведь это еще и побыстрее надо бы... И насчет ошибки - скорей всего у меня сбои конкретно в памяти...