[入门] 再论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
看得迷糊。可以讲是通俗一点吗?
上面说的“对于它的初衷来说是个失误~~”,指的是哪个初衷呢? |