内存分配中的函数式编程案例

我一直在阅读有关函数式编程的文章,并对某些情况下对程序的影响感到好奇。

对于我当前的情况,我在C中有一个向量(双精度数组),并且经常在需要“返回向量”的计算中使用该向量,但是我不想分配额外的内存,因此我使用签名例如

void compute(vector* input, vector* output);

我在同一个输入向量上使用别名来保存输出,而不必为新的输出向量分配额外的内存。

现在,对于函数式编程,我的经验仅限于Mathematica编程语言和一些普通的口齿不清,但我对此可能产生的效果感到好奇。假设我有一个向量v,并且用一种功能语言编写了相同的计算程序。在Mathematica中,我要声明:

v = compute(v)

在其他标准功能语言中,根据我对阅读的理解,这些对象是不可变的,因此v不应更改,并且v将被重新分配为新向量,从而取消分配旧向量。我想知道我的理解是否正确,如果不正确,会发生什么而不是我的误解。我知道延迟评估,并且还想知道在使用和不使用延迟评估的情况下,这些系统会有什么不同。

谢谢。

编辑1:询问有关我来自哪里的具体情况。我正在研究的一个项目是光线跟踪器,在这种情况下,通常我需要请求用于照明的矢量信息或达到此目的的东西,此数据通过传递给函数的指针存储,而目标存储矢量为在功能之外分配。我对函数式编程的理解是,正如我发表的评论一样,当我做类似的事情时,由于向量将是不可变的,因此我无法将指向该函数的指针传递给要修改的向量,而该函数将返回新分配的向量:

v =计算(v)

v将是新分配的向量。我最初的问题是该声明的准确性,并且正如有人发布了对此声明的支持那样,我的下一个问题不是认为这可能是浪费内存的问题吗?

塞巴斯蒂安

本文对不可变的函数式编程范例中涉及的数据结构编程进行了很好的描述

http://www.infoq.com/articles/in-depth-look-clojure-collections

C的问题在于,使用不可变的概念确实需要很多纪律。话虽如此,有些方案虚拟机是用C实现的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

内存分配中的函数式编程案例

来自分类Dev

函数式编程中的接口

来自分类Dev

JavaScript中的函数式编程

来自分类Dev

JS中的函数式编程

来自分类Dev

Scala 中的函数式编程

来自分类Dev

Swit中的函数式编程,用于分配数组元素以更正“存储桶”

来自分类Dev

Swit中的函数式编程,用于分配数组元素以更正“存储桶”

来自分类Dev

在函数中为结构分配内存

来自分类Dev

构造函数中的内存分配异常

来自分类Dev

Golang:Go中的函数式编程

来自分类Dev

函数式编程中的向量化

来自分类Dev

函数式编程中的返回值

来自分类Dev

Swift中的多线程函数式编程

来自分类Dev

函数式编程中的共享资源

来自分类Dev

CS:函数式编程中的承诺平等

来自分类Dev

Java中的函数式编程语法

来自分类Dev

函数式编程中的共享资源

来自分类Dev

函数式编程中的条件“赋值”

来自分类Dev

函数式编程中的计数器

来自分类Dev

Haskell 中的求和 - 函数式编程

来自分类Dev

在函数式编程中重用功能

来自分类Dev

动态内存分配中的C编程问题

来自分类Dev

在C中的函数内动态分配函数中的内存

来自分类Dev

内存分配和C编程

来自分类Dev

嵌入式C中的动态内存分配

来自分类Dev

我无法从C ++中的函数式编程复制函数备注

来自分类Dev

Javascript函数式编程

来自分类Dev

函数式编程实例

来自分类Dev

在C中的函数调用中为指针分配内存