首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Scheme中没有办法调整SRFI-4矢量的大小?

为什么在Scheme中没有办法调整SRFI-4矢量的大小?
EN

Stack Overflow用户
提问于 2010-03-26 05:11:39
回答 2查看 373关注 0票数 4

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

因为我没有找到任何关于"resize-f64vector“过程的引用,所以我想知道它为什么不存在(是否创建一个新的向量并复制是我唯一的选择)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-18 01:12:22

有几个原因。

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

考虑到这一点,几乎每次调整向量的大小时,它最像是被复制到一个可以容纳新向量的新内存位置。只是它的原始事实与记忆的布局方式。

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

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

这就是同构向量的主要目标,即潜在地更快地访问特定的内存块。

由于调整向量的大小几乎不可避免地涉及到复制,因此您也可以显式地设置该复制,从而使编译器能够完全看到向量引用中的更改。

票数 2
EN

Stack Overflow用户

发布于 2010-05-18 00:57:12

Gambit-C方案可以shrink vectors,但是如果你想要一个通用的解决方案,你就不走运了。您可以使用比所需大小更大的向量,以避免频繁的重新分配和复制,比如每次需要更多空间时将向量加倍,并对实际使用的插槽数量进行计数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2519407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档