在C语言中没有字符串这个概念,对吗?那么,我想知道:在现代语言(例如C#)中,使用字符数组而非字符串是否能带来一些内存节省的优势。
在Python中,如果我理解你的意思正确,答案是“这取决于情况”。(出于方便起见,我使用python,你说“任何现代语言”)
我编写了一个函数来创建字母表的字符数组和另一个用于创建字母表字符串。然后分别运行它们一百万次。
字符数组大约需要1.7秒,而字符串数组只需要0.5秒。
“也许是开销的问题?”您可能会问。
好吧:我在全局初始化它们,然后对每个变量进行迭代循环(一百万次),将某些变量设置为当前字母。
字符数组花费了7.7秒,而字符串花费了9秒。
“如果你正在寻找特定元素怎么办?”
我遍历每个变量以查看元素是否包含'z'。字符数组花费了1.8秒,而字符串花费了0.4秒。
“这很有趣,也许只是赋值的问题?”
我的最后一个测试是仅迭代而不分配任何内容。
同样,字符数组比字符串迭代更快,仅需3.9秒,而字符串迭代则需要5.3秒。
看起来字符串在初始创建和搜索(我还假设排序也是如此,但我不打算编写排序函数来验证)方面更快,而字符数组在迭代事件(对于数组/字符串中的每个元素)方面更快。
希望这能有所帮助。
附注 - 我第一个测试类的代码:
#!/usr/bin/env python
import dis
import time
def char_func():
my_c_var = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
#print my_c_var
def stri_func():
my_s_var = "abcdefghijklmnopqrstuvwxyz"
#print my_s_var
start_time = time.time()
for i in range(1000000):
char_func()
print("--- %s seconds ---" % (time.time() - start_time))
start_time = time.time()
for i in range(1000000):
stri_func()
print("--- %s seconds ---" % (time.time() - start_time))