- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我看到 SRFI 4 没有提到调整向量大小。我正在使用 f64vectors(为此我需要快速访问),我希望能够快速调整它们的大小(类似于 realloc 在 C 中所做的),而不一定要复制整个向量。
由于我没有找到任何对“resize-f64vector”过程的引用,我想知道为什么它不存在(如果制作一个新矢量并复制是我唯一的选择)。
最佳答案
几个原因。
通过在语言中使用同类向量类型,编译器可以对性能做出一些可靠的假设。理想情况下,在一些高度优化的场景中,对向量的引用可能只是指向一 block 内存。并不是说任何 Scheme 实现实际上都可以做到这一点,但他们可以做到这一点。
鉴于此,几乎每次调整矢量大小时,它最像是复制到可以容纳新矢量的新内存位置。只是内存布局方式的原始真相。
因此,鉴于此,您可以看到如果我只有一个指向内存的指针,如果该缓冲区被更改和移动,那么我的指针将不再有效。它指向旧内存。
但是如果我可以假设我的内存大小永远不会改变,那么这是一个安全的赌注,作为编译器的优化,我的向量的内存永远不会改变,并且我可以表示和引用该向量作为只是一个指向内存的指针。
这就是齐次向量的主要目标,可以更快地访问专门的内存块。
由于调整向量的大小几乎不可避免地涉及到一个副本,因此您最好将该副本显式化,让编译器完全了解向量引用的变化。
关于vector - 为什么无法在 Scheme 中调整 SRFI-4 向量的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2519407/
我将从事并发编程的一个项目,如果能够使用 Scheme,那就太好了。但是,对于这个项目,确实需要使用不同的 CPU 内核(基于延续的线程不会这样做)。 那么,是否有一些 R5RS 方案可以利用不同的
在 Chicken 中,我似乎可以(use srfi-9),但在 Guile 中,您似乎可以说 (use-modules (srfi srfi-9)) , 在 Racket 中是 (require s
在 Chicken 中,我似乎可以(use srfi-9),但在 Guile 中,您似乎可以说 (use-modules (srfi srfi-9)) , 在 Racket 中是 (require s
我是 Chez 的新手,考虑到现有的各种维护和未维护的存储库,我只是想弄清楚一些情况。 是否有一个通常首选的源代码库来获取 R6RS SRFI 库(专门用于 Chez Scheme)? 我知道http
我正在尝试在 guile 中使用 srfi-1。我使用以下代码来包含 srfi:(use-modules (srfi srfi-1)) 但是,我收到一条错误消息,说 srfi 可能未定义。我应该如何使
Racket 中的 in-range 返回一个流。 racket/stream 库中的流上定义了大量函数。但是我不能对它们使用 srfi/41 中的函数 stream-take。我想执行 (strea
我正在使用 chicken scheme 版本 4.9.0.1 并且正在开发一个使用单元测试包 srfi-64 的单元测试套件。 我在这个单元测试包中遇到测试错误问题。 问题的一个最小示例: (req
我看到 SRFI 4 没有提到调整向量大小。我正在使用 f64vectors(为此我需要快速访问),我希望能够快速调整它们的大小(类似于 realloc 在 C 中所做的),而不一定要复制整个向量。
在SRFI 40我们可以看到它已被弃用并被 SRFI 41 取代.我正在使用存在 SRFI 40 但不存在 SRFI 41 的 SISC。我想知道它们之间的主要区别,我可以放心地正常使用 SRFI 4
我是一名优秀的程序员,十分优秀!