gpt4 book ai didi

vector - 为什么无法在 Scheme 中调整 SRFI-4 向量的大小?

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:35 24 4
gpt4 key购买 nike

我看到 SRFI 4 没有提到调整向量大小。我正在使用 f64vectors(为此我需要快速访问),我希望能够快速调整它们的大小(类似于 realloc 在 C 中所做的),而不一定要复制整个向量。

由于我没有找到任何对“resize-f64vector”过程的引用,我想知道为什么它不存在(如果制作一个新矢量并复制是我唯一的选择)。

最佳答案

几个原因。

通过在语言中使用同类向量类型,编译器可以对性能做出一些可靠的假设。理想情况下,在一些高度优化的场景中,对向量的引用可能只是指向一 block 内存。并不是说任何 Scheme 实现实际上都可以做到这一点,但他们可以做到这一点。

鉴于此,几乎每次调整矢量大小时,它最像是复制到可以容纳新矢量的新内存位置。只是内存布局方式的原始真相。

因此,鉴于此,您可以看到如果我只有一个指向内存的指针,如果该缓冲区被更改和移动,那么我的指针将不再有效。它指向旧内存。

但是如果我可以假设我的内存大小永远不会改变,那么这是一个安全的赌注,作为编译器的优化,我的向量的内存永远不会改变,并且我可以表示和引用该向量作为只是一个指向内存的指针。

这就是齐次向量的主要目标,可以更快地访问专门的内存块。

由于调整向量的大小几乎不可避免地涉及到一个副本,因此您最好将该副本显式化,让编译器完全了解向量引用的变化。

关于vector - 为什么无法在 Scheme 中调整 SRFI-4 向量的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com