大多数语言都有某种复合类型,例如:结构或类。在大多数情况下,在更高级语言中,这些语言被实现为指向包含复合数据的单独分配的内存块的指针。假设我们有一个类型Foo:
struct Foo {
int bar;
float baz;
}
在C中,如果我们创建一个Foos数组,则数组本身将在单个内存块中连续包含bar和baz值。如果我们定义另一个包含Foo的结构,那么它的bar和baz也将直接嵌入到包含的结构中。
在Java或Python等许多高级语言中,如果我们要创建一个Foos数组或列表(必须是类或其他东西),底层内存块将包含指向单独分配的实例的指针。 FOOS。
对于涉及大型数据集的一些使用模式,与直接嵌入相比,这可能是一个巨大的开销。存在内存开销,因为每个单独分配的对象通常都有一个头,并且有自己的指针。然后由于额外的高速缓存行未命中以及数据的更加糟糕的位置而存在大的速度成本,这可能超过一百倍。
大多数(或所有)低级/系统编程语言允许这种嵌入而不装箱,但大多数是不安全的(即需要手动内存管理并且具有未定义的行为)。大多数高级语言都需要拳击。
对于大型数据集处理任务,我想使用一种不需要装箱复合数据类型的语言,但没有低级系统语言的程序员时间开销。到目前为止,我只知道C#/ .NET,并且在某种程度上Go可以做到这一点,但它们有其自身的局限性。还有其他选择吗?
我所知道的:
无盒装复合材料&安全
不安全:
需要拳击:
(许多这些拳击语言都有允许使用未装箱数据的库或扩展,但这通常是一种特殊用途的功能,与其他语言不能很好地融合。)
安全+未装箱的复合材料类别中还有哪些其他语言?