- PVSM.RU - https://www.pvsm.ru -

Go не рекомендуется использовать для разработки на Windows 32bit (UPD: и на Linux тоже)

Abtin Forouzandeh обнаружил баг [1] в реализации go для 32-хбитной платформы Windows. Простейшая программа запускается и тут же падает.

По итогам исследования ошибки оказалось, что дело в выделении памяти рантаймом go. В 32-хбитной системе Windows всего доступны 4GB виртуального адресного пространства, верхние 2 из которых зарезервированы для системы, а процессу остаются нижние 2 гигабайта. При запуске программы на go, скомпилированной компилятором 8g рантайм пытается выделить 512 мегабайт виртуального адресного пространства для нужд сборщика мусора. Проблема в том, что память требуется одним куском. Однако в этой реализации языка библиотека KERNELBASE.DLL загружается в середине адресного пространства, выделить протяженный кусок памяти у системы не получается и происходит падение.

Разработчики go извещены [2] о проблеме, но ошибке выставлен приоритет «Priority-Later» и в go 1 версии она не исправлена. Решения по исправлению сводятся к «Переходите на 64 бита» и «Переходите на Unix» и вопросам «Как же мы это просмотрели?». Автор оригинального поста предпочел перейти с go на С.

UPD: Как правильно указывает atd [3] даже если вы перейдете на 32bit Linux проблемы со сборщиком мусора не исчезнут. Вот этот баг [4] показывает, что для определенных структур данных сборщик мусора не справляется с задачей. Для долго работающих и активно использующих память программ это означает постоянные падения. Рекомендации разработчиков — черная магия типа «Разнесите долго живущие и коротко живущие данные по разным структурам» или опять же «Переходите на 64 бита». В ближайшее время ошибка исправлена не будет.

Автор: terrier


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/5032

Ссылки в тексте:

[1] обнаружил баг: http://www.abtinforouzandeh.com/2012/04/08/Do-Not-Use-Go-For-32bit-Development.html

[2] извещены: http://code.google.com/p/go/issues/detail?id=2323

[3] atd: http://habrahabr.ru/users/atd/

[4] Вот этот баг: http://code.google.com/p/go/issues/detail?id=909