Максимальное количество битов в пользовательских типах примитивов? - PullRequest
1 голос
/ 15 апреля 2019

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

primitive type My10MBBuffer 83886080 end

(что приведет к ошибке invalid number of bits in primitive type My10MBBuffer)

Я думаю, что юлия источник этой ошибки:

   ssize_t nb = jl_unbox_long(vnb);
    if (nb < 1 || nb >= (1 << 23) || (nb & 7) != 0)
        jl_errorf("invalid number of bits in primitive type %s",
jl_symbol_name((jl_sym_t*)name));

[EDIT:]

По результатам проб и ошибок это число составляет 8388600 (8 * (1024 * 1024-1)) бит.

Почему это так и почему плохо использовать пользовательский тип примитива для размещения большого количества данных?

1 Ответ

1 голос
/ 15 апреля 2019

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

8388600 bits

Это ограничение исходит из кода

    if (nb < 1 || nb >= (1 << 23) || (nb & 7) != 0)
        jl_errorf("invalid number of bits in primitive type %s",
                   jl_symbol_name((jl_sym_t*)name));

в interpreter.c исходного кода Джулии.

1 << 23 - 1 МБ (1024 * 1024 байта). Таким образом, ваш тип примитива должен быть как минимум на один байт меньше 1 МБ, что составляет максимум 8388600 бит.

Что касается того, почему этот предел выбран, я бы предположил, что выбран только 1 МБ, поскольку размер стека в большинстве операционных систем не очень большой. (по умолчанию 1 или 2 МБ)

Я полагаю, что если вы перекомпилируете Julia с измененным кодом, вы можете изменить этот предел, я не вижу никакой другой причины, кроме размера стека, почему этот предел должен составлять 1 МБ, хотя я действительно не знаю, почему вы хочу этого.

...