Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Вт апр 16, 2024 20:21

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: разбор полетов - тихое падение на ALLOCATE
СообщениеДобавлено: Вт дек 09, 2008 19:52 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
Варнак писал(а):
Пожалуй, этот абзац можно без малейших изменений вставлять в конец любой статьи ..

да, действиетельно ;)

Кстати, столкнулся с двумя проблемами, вероятно, в винде
попытка подряд выделить больше 10 маленьких блоков в хипе роняет программу. Причем СПФ падает молча.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Последний раз редактировалось mOleg Сб дек 13, 2008 20:21, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 10, 2008 01:15 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
код? (проблемы в винде, как же)

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 10, 2008 01:21 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
однажды у меня была необходимость положить много файлов на виртуальный диск в памяти
глючило, пока не обратил внимание. что файлов получается ровно 512, а дальше глюк - диск не позволял

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 10, 2008 06:48 
Не в сети

Зарегистрирован: Ср сен 13, 2006 10:06
Сообщения: 636
Откуда: Омск
Благодарил (а): 0 раз.
Поблагодарили: 3 раз.
mOleg писал(а):
Кстати, столкнулся с двумя проблемами, вероятно, в винде
попытка подряд выделить больше 10 маленьких блоков в хипе роняет программу. Причем СПФ падает молча.
2) RESIZE на небольшую величину портит данные в блоке, изменяющем размер 8(((
проблемы на WINXP

А у меня все отлично, нет никаких проблем. Могу прислать либу для работы с кучей.
А ресизе так делаешь?
Код:
\ Изменить размер выделенной памяти
: MemResize ( n addr handle -> addr )
   9 SWAP HeapReAlloc ;

_________________
Меня нет, не будет и не было.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Ср дек 10, 2008 19:03 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
ygrek писал(а):
код? (проблемы в винде, как же)

а вот приведенный в статье код. В слове new-msg убрать 100 ROUND
после десятого сообщения от стандартного spf.err падает молча СПФ.

in4 писал(а):
Из опыта реальных разработок дальнейшие расширения идеи:
резервировать место для некоторого количества сообщений(которые можно добавить позже)

ну, в приведенном коде используется куча, поэтому добавлять можно сколько угодно сообщений (лишь бы памяти хватало), но для каждого сообщения выделяется свой блок (что не очень хоршо при большом количестве сообщений).

in4 писал(а):
выбирать одно сообщение из группы по задаваемому программой индексу, возможно с использованием масок(требуется выравнивание номеров сообщений на какое-то число)

не совсем понял о чем речь. Речь о нескольких списках сообщений?

in4 писал(а):
возможность иметь короткие тексты сообщений(алиасы, сленг), которые опционально заменять на более подробные/точные(возможно, в отдельном редакторе)

А зачем? в случае отсутствия списка сообщений будет выдаваться код сообщения. Понятно, что код особо полезной информации не несет.

Pretorian писал(а):
А ресизе так делаешь?
Код:
\ Изменить размер выделенной памяти
: MemResize ( n addr handle -> addr )   9 SWAP HeapReAlloc ;

использовал тот ресайз, который идет в СПФе.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 11, 2008 09:39 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
mOleg писал(а):
а вот приведенный в статье код. В слове new-msg убрать 100 ROUND

после десятого сообщения от стандартного spf.err падает молча СПФ.


Приведённый в статье код сложно назвать минимальным примером бага. Впрочем ошибку видно невооружённым глазом. Если бы вы потрудились выделить минимальный нерабочий пример -- сразу бы заметили.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 11, 2008 19:22 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
ygrek писал(а):
Приведённый в статье код сложно назвать минимальным примером бага. Впрочем ошибку видно невооружённым глазом. Если бы вы потрудились выделить минимальный нерабочий пример -- сразу бы заметили.

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 11, 2008 23:33 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
mOleg писал(а):
Не вижу ошибки. Если не сложно, поясните пожалуйста.

Код:
: SCOPY   ( asc # addr --> ) 2DUP C! 1 + SWAP CMOVE ;

Код:
: new-msg ( asc # msg --> )
          OVER /msgRecord + 1 + ALLOCATE THROW
          TUCK off_msgName !
          DUP >R off_msgBody SCOPY
          R@ msg-list change
          R> off_msgPrev ! ;

mOleg писал(а):
кроме того, система не должна падать молча, что наблюдается.

Да ну? А если вы занулите всё адресное пространство система тоже должна сообщить почему она упала? Методом телепатии?

Собственно говоря после того как программа попортила хип или записала по произвольному адресу гарантировать что-либо уже невозможно. Можно попытаться вывести дамп стека и минимизировать зависимость от разных вспомогательных структур чтобы выдать как можно больше информации не полагаясь на "испорченные" средства. Но это не всегда может получиться. Скажите хотя бы какую версию spf вы используете чтобы можно было попытаться воспринять это как багрепорт и возможно улучшить механизм дампа.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 11, 2008 23:40 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
ygrek писал(а):
Да ну? А если вы занулите всё адресное пространство система тоже должна сообщить почему она упала? Методом телепатии?

в каком месте происходит "зануление" и почему выравнивание на 8 байт отменяет падение?

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Чт дек 11, 2008 23:42 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
ygrek писал(а):
Скажите хотя бы какую версию spf вы используете чтобы можно было попытаться воспринять это как багрепорт и возможно улучшить механизм дампа.

любую, в смысле от 4.16 до 4.19 включая сборку из cvs хранилища.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 12, 2008 10:36 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
mOleg писал(а):
в каком месте происходит "зануление" и почему выравнивание на 8 байт отменяет падение?

ygrek писал(а):
если

Это был просто пример что система не может оставаться работоспособной "в любом случае".

Конкретно по вашему коду. Слов SCOPY копирует n+1 байт. Слово new-msg выделяет n+/msgRecord байт. Один байт пишется за границу выделенной памяти.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 12, 2008 20:41 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5062
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 23 раз.
Поблагодарили: 63 раз.
ygrek писал(а):
Конкретно по вашему коду. Слов SCOPY копирует n+1 байт.

да, действительно (исправил).
Хотя всеравно странно, что ALLOCATE падает молча.

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Сб дек 13, 2008 00:59 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Приведите пожалуйста точный one-click тесткейс.

Лирическое отсутпление. Я не понимаю почему программистам (программистам ёлки-палки, не пользователям) надо постоянно повторять что сообщение "у меня упало" не несёт информации вообще никакой. Нету здесь телепатов (или есть?).
Я понимаю когда классический чайник сообщает "it crashed", и из него надо клещами вытягивать по капельке информацию. Но программист.
Жаловаться на кривые библиотеки, недостаток документации, падения итп надо _обязательно_. Но багрепорт это всегда :
str, acr, exr (steps to reproduce, achieved results, expected results). Причём steps to reproduce это максимально полный environment, разные люди могут подразумевать разные очевидности. Чтобы баг пофиксить его надо разобрать, для того чтобы его разобрать его надо повторить. Это не очевидно? Без дополнительной информации такие сообщения выглядят как целенаправленный FUD, а не желание помочь (чем и является любой багрепорт (не сообщение о баге это очевидно умышленное вредительство)).
Это банальности, но у меня почему-то постоянный дежавю.

ЗЫ Вообще код выше у меня не падал (и не падает). Я не знаю что надо сделать чтобы он упал, я не знаю что вы делали чтобы он упал. Я могу найти простые ошибки, но, увы и ах, не умею дебажить всю систему в уме (пока-что?).

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Пн дек 15, 2008 19:50 
Не в сети
Аватара пользователя

Зарегистрирован: Вт ноя 06, 2007 21:23
Сообщения: 227
Откуда: Екатеринбург
Благодарил (а): 4 раз.
Поблагодарили: 7 раз.
Хип хипу - рознь, проверьте правильность именования функций ;) Еще винда ХР выделяет блоки памяти выровненые по длине параграфа, т.е. 16 байт, при юзании Heap, а при Virtual по странице, т.е. 4К.
    Учтите, куча должна быть создана до того как в ней начнут рыться

Код:
CLASS HEAP
   VARIABLE HANDLE

   : CONSTRUCT ( - )
       0  1048576 4 * ( 1Megabyte)  DUP ( growable) :: HeapCreate HANDLE ! ;

   : DESTRUCT ( - )
      HANDLE @ :: HeapDestroy DROP ;

   : ALLOCATE ( size - addr ior )
      HANDLE @ HEAP_ZERO_MEMORY ROT :: HeapAlloc DUP 0= -100 AND ;

   : FREE ( addr - ior )
      HANDLE @ 0 ROT :: HeapFree 0= -102 AND ;

   : RESIZE ( addr1 size - addr2 ior )
      HANDLE @ HEAP_ZERO_MEMORY 2SWAP :: HeapReAlloc DUP 0= -100 AND ;

   : MEMSIZE ( addr - size )
      HANDLE @ 0 ROT :: HeapSize ;

END-CLASS
[/code]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 16, 2008 11:04 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
mOleg писал(а):
Хотя всеравно странно, что ALLOCATE падает молча.

В cvs версии падает с дампом стека из RtlAllocateHeap.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB