|
1
7
|
|
|
2
15
是的,Perl增大字符串将导致重复的重新分配。Perl为字符串分配了一点额外的空间,但只分配了几个字节。您可以使用devel::peek看到这个。这种重新分配非常快,而且通常不会复制内存。相信您的内存管理器,这就是为什么您要用Perl而不是C进行编程。请首先对它进行基准测试!
可以使用
或者如果你想进入XS,你可以打电话给
混沌建议使用一个数组,然后将其全部连接在一起,这将使用双倍以上的内存。阵列的内存。为数组中的每个元素分配的每个标量的内存。存储在每个标量元素中的字符串的内存。连接时的副本内存。如果它导致代码更简单,那么就这样做,但不要认为您在保存任何内存。 |
|
3
7
Perl的字符串是可变的,因此附加到字符串可以 不是 招致字符串复制惩罚。 你可以尝试所有你想找到的“更快”的方法,但这闻起来很糟糕的过早优化。 举个例子,我创建了一个抽象化了艰苦工作的类。它工作得很好,但它的所有愚蠢的伎俩,真的很慢。 结果如下:
是的,没错,Perl比我认为的值得尊敬的实现快1200%。 分析你的代码并找出真正的问题是什么,不要尝试优化那些甚至不是已知问题的东西。
|
|
|
4
3
我不知道Perl字符串是如何实现的,但一个很好的猜测是 constant amortized time . 这意味着,即使您确实找到了一种预先分配字符串的方法,它为所有脚本用户节省的总时间也将少于您花在请求上的时间。 this question 堆栈溢出时。 |
|
5
0
我会去阵列/连接方式:
然后
|
|
|
6
-2
是的,预先扩展你知道会增长的字符串是个好主意。 您可以使用“x”运算符来执行此操作。例如,要预分配1000个空间: $S=“”x 1000: |
|
Ben · 统计向量中的单词在字符串中出现的频率 1 年前 |
|
|
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 1 年前 |
|
|
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 1 年前 |
|
|
user764754 · 防止多行原始字符串文字中出现新行字符 1 年前 |
|
|
Bogaso · 从列表中返回与模式匹配的元素 1 年前 |
|
|
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 1 年前 |