2013-06-25 1 views
11

Рассмотрим следующий код: http://hpaste.org/90394Segfault чтения ленивый байтовой строки мимо 2^18 байт

Я памяти отображение большого 460mb файл ленивой байтовой строки. Длина отчетов ByteString 471053056.

Когда изменен на идентификатор нижнего узла, то есть: 10000, он отлично работает. Однако; как только я попробую и сериализую что-нибудь прошлое ровно 2^18 байт (262144) ByteString, я получаю Segmentation fault/access violation in generated code и завершение.

Я запускаю Windows и используя GHC 7.4.2.

Просьба сообщить, является ли это моей ошибкой или какой-либо проблемой с лени или какой-либо проблемой с Haskell.

+1

Ваш 'getNXNode' не соответствует определению данных' NXNode'. Если это преднамеренно, то стоит отметить комментарий. Но я не вижу, как это может вызвать segfault здесь. –

+0

@DanielFischer 'NXNode 0 <$> ...' :) – kvanberendonck

+0

Да, но вы пропустите 20 байтов и читаете только 12 на узел. –

ответ

1

Обратите внимание, что я обновил mmap, чтобы правильно включить прайму NOINLINE в стратегическую точку в коде. mmap-0.5.9 для захватов. Дайте мне знать, сохранится ли проблема. Редактировать: да, я автор mmap.

+0

Пока он кажется, вы автор mmap, это не совсем понятно из вашего ответа. Я хотел бы добавить дополнительную информацию. – Syon

Смежные вопросы