[入门] 再论D语言数组的性能

Colorful 2007-05-18
本来想发篇帖子,了了几句说明情况就OK了。
但是,后来越写越多,干脆写成文章得了,哈哈。
偶是新人,如有不对的地方,还望各位老前辈指正啊。

文章地址:
http://colorful1982.blog.sohu.com/46495851.html
Colorful 2007-05-18
oldrev老大,你有联系方式吗,不然沟通起来真是很麻烦。:)
oldrev 2007-05-18
MSN: mallocxp@hotmail.com
qiezi 2007-05-18
引用

访问一维数组,和使用指针访问速度差不多(实际上要略慢于指针)。

这个应该是因为数组的范围检查吧。release模式编译时会禁止掉范围检查,这时候效率应该会比较高。

另外你测试效率时,最好是同一个编译器测试,比如测试指针效率时就用数组的.ptr吧,否则得到的可能是编译器生成的代码效率了。

引用

创建数组的时间大约跟迭代访问一遍的时间相仿(数组越大越相近,但是实际情况中往往小数组的使用更加频繁)。

这个大概是因为数组初始化。改成char arr[100000] = void禁止它初始化,应该可以提速。

引用

int[10] arrayC = new int[10]; // 这种情况下,耗时相当多,数组越大越耗时

这个应该也是因为数组初始化,这种情况下我还不知道如何禁止它。
Lich_Ray 2007-06-07
相比之下,C语言根本就不会考虑初始化。。。
感觉D在中语言设施中允许在堆上分配数组,对于它的初衷来说是个失误~~
oldrev 2007-06-07
Lich_Ray 写道
相比之下,C语言根本就不会考虑初始化。。。
感觉D在中语言设施中允许在堆上分配数组,对于它的初衷来说是个失误~~


能仔细谈谈吗?似乎在堆上只能用 malloc  分配吧
qiezi 2007-06-07
灵活性的体现。

从已分配内存上转换成数组,不需要复制内存:
size_t len = 1024;
char* p = malloc(len);
char[] arr = p[0..len];

arr.ptr还是指向p的,所以没有重新分配内存并拷贝。

这个可以和C++ STL的vector/string比较一下,哪个性能更高?

如果想复杂,只需要p[0..len].dup就可以了,非常灵活,效率和方便都照顾到了,优美,优美亚。

new方式分配数组是在GC上分配的。
Lich_Ray 2007-06-07
oldrev 写道
Lich_Ray 写道
相比之下,C语言根本就不会考虑初始化。。。
感觉D在中语言设施中允许在堆上分配数组,对于它的初衷来说是个失误~~


能仔细谈谈吗?似乎在堆上只能用 malloc  分配吧

看清楚了,我说的是“在语言设施中允许在堆上分配数组”,意思是把这一动态语言才有的机制做到这样一种本应该很"硬"语言里让人很不爽。
和C++比效率?那是历史原因造成的。真正够快的C++内存分配库多得是,但和这一语言的思想联系太少了。
oldrev 2007-06-07
请允许我问一个愚蠢的问题:C++ 的 new 不是在堆上分配的?
qiezi 2007-06-07
看得迷糊。可以讲是通俗一点吗?

上面说的“对于它的初衷来说是个失误~~”,指的是哪个初衷呢?
Global site tag (gtag.js) - Google Analytics