首页 > 解决方案 > 自定义原始类型的最大位数?

问题描述

我现在明白这不是一个好主意,但准确地说,这是自定义原始类型中的最大位数(文档只是说它必须是 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));

[编辑:]

根据试验和错误,该数字似乎是 8388600 (8*(1024*1024-1)) 位。

为什么会这样,为什么使用自定义原始类型来托管大量数据是不好的?

标签: typesjulia

解决方案


您可以为原始类型设置的最大位数是

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));

在Julia 源代码的interpreter.c中。

1 << 23为 1 MB(1024*1024 字节)。因此,您的原始类型必须至少比 1 MB 小一个字节,这使得最大 8388600 位。

至于为什么选择这个作为限制,我只猜测选择了 1 MB,因为大多数操作系统上的堆栈大小并不是很大。(默认为 1 或 2 MB)

我想如果你用上面的代码重新编译 Julia,你可以调整这个限制,除了堆栈大小之外,我没有看到任何其他原因为什么这个限制应该是 1 MB,虽然我真的不知道你为什么想要那个。


推荐阅读