types - 自定义原始类型的最大位数?
问题描述
我现在明白这不是一个好主意,但准确地说,这是自定义原始类型中的最大位数(文档只是说它必须是 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)) 位。
为什么会这样,为什么使用自定义原始类型来托管大量数据是不好的?
解决方案
您可以为原始类型设置的最大位数是
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,虽然我真的不知道你为什么想要那个。
推荐阅读
- java - 一个受保护的变量是可访问的,而另一个则不是。为什么?
- java - 为什么 Random.nextInt() 和 Math.random 超出了我设置的范围?
- reactjs - 使用 React Router 加载组件你不应该在外部使用
- f# - F# 中的 SRTP 类型类
- r - 在 ggplot2 中一起绘制两个分离的模型
- angular - Angular Stepper:是否可以隐藏 Active Step 的垂直线?
- django - drf - 仅对 post() 方法使用序列化程序
- javascript - 与逻辑和运算符的严格相等和松散相等
- spring - 无法连接到 mongodb 容器主机
- r - getanID 函数不会为 R 中的组分配正确的值