Dart:在赋值中使用 * 运算符时分配了多少个字符串对象?
Dart: how many string objects are allocated when using the * operator in an assignment?
在下面的代码中,我希望总共分配 3 个字符串:
String str = "abc";
String str2 = str*2; //"abcabc"
- 1 创建时
str
- 另一个当创建 str 的副本以与自身连接时
- 第三个用于保存 str 与自身的连接 (
str2
)
这个例子中的分配是少了还是多了?我知道字符串在 Dart 中是不可变的,但我不确定这些操作是如何在幕后工作的,因为 属性.
我不了解 Dart VM 的内部工作原理,但我会说:
"abc"
创建一个字符串对象。
String str = "abc";
使 str
引用创建的字符串对象 ("abc"
)。
str*2;
创建第二个 String 对象 "abcabc",str2
在第二个语句之后引用。
所有两个String对象。
使用优化编译器很难确定。如果您想了解更多信息,可以使用 irhydra.
查看生成的本机代码
一般来说,一个好的方法是编写尽可能可读的代码,然后使用工具找到代码中的瓶颈,并对其进行优化。
例如 observatory 可以显示哪些对象使用的内存最多,哪些方法 运行 最多。
在下面的代码中,我希望总共分配 3 个字符串:
String str = "abc";
String str2 = str*2; //"abcabc"
- 1 创建时
str
- 另一个当创建 str 的副本以与自身连接时
- 第三个用于保存 str 与自身的连接 (
str2
)
这个例子中的分配是少了还是多了?我知道字符串在 Dart 中是不可变的,但我不确定这些操作是如何在幕后工作的,因为 属性.
我不了解 Dart VM 的内部工作原理,但我会说:
"abc"
创建一个字符串对象。
String str = "abc";
使 str
引用创建的字符串对象 ("abc"
)。
str*2;
创建第二个 String 对象 "abcabc",str2
在第二个语句之后引用。
所有两个String对象。
使用优化编译器很难确定。如果您想了解更多信息,可以使用 irhydra.
查看生成的本机代码一般来说,一个好的方法是编写尽可能可读的代码,然后使用工具找到代码中的瓶颈,并对其进行优化。
例如 observatory 可以显示哪些对象使用的内存最多,哪些方法 运行 最多。