Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 茱莉亚推!需要整个阵列的副本_Julia - Fatal编程技术网

Julia 茱莉亚推!需要整个阵列的副本

Julia 茱莉亚推!需要整个阵列的副本,julia,Julia,查看推送代码!,指示数组增长到一个元素的大小。阵列是否在逻辑上增加了一个元素的大小,而底层存储只要大于或等于所需的存储元素就保持不变,并且在存储已满且无法容纳额外元素时,通过创建一个大得多的存储并将整个阵列复制到阵列中来增加?或者,是否必须在每次推送时重新创建阵列!手术 function push!(a::Array{T,1}, item) where T # convert first so we don't grow the array if the assignment won't

查看推送代码!,指示数组增长到一个元素的大小。阵列是否在逻辑上增加了一个元素的大小,而底层存储只要大于或等于所需的存储元素就保持不变,并且在存储已满且无法容纳额外元素时,通过创建一个大得多的存储并将整个阵列复制到阵列中来增加?或者,是否必须在每次推送时重新创建阵列!手术

function push!(a::Array{T,1}, item) where T
    # convert first so we don't grow the array if the assignment won't work
    itemT = convert(T, item)
    _growend!(a, 1)
    a[end] = itemT
    return a
end

Julia阵列以摊销成本的方式增长(目前的增长系数为2),参见,例如:

做一些基准测试似乎在性能方面证实了这一点。也就是说,你能提供一份推荐信吗?这带来了另一个问题:与普通C数组相比,这种机制显然需要影响性能的绑定检查。你觉得怎么样?从调用的函数开始,然后再到这里的C实现。@BogumiłKamiński够公平的了。Will do:-)>这带来了另一个问题:与普通C数组相比,这种机制显然需要绑定检查,这会影响性能。你这是什么意思?C数组是不可增长的,因此您的意思必须与之不同。正如答案中所述,数组当前的增长因子为2,因此您只需要log2(N)重新分配(或拷贝)即可增长N个元素。另外,如果您大致知道需要多少空间,可以使用
sizehint功能可最大限度地减少重新分配。