C语言中没有字符串这样的概念,对吧? 所以,我想知道:在现代语言中使用字符数组而不是字符串会给任何内存节省优势,例如C#。
答案 0 :(得分:0)
在Python中,如果我正确理解你,答案是“它取决于”。 (我在方便时使用python,你说“任何现代语言”)
我创建了一个创建字母表字符数组的函数,另一个函数创建了一个字母表字符串。然后每100万次运行它们。
与字符串数组的.5秒相比,字符数组花了大约1.7秒。
“也许这是一件令人头疼的事情?”你可能会问
好的:我在全局初始化它们,然后通过一个循环(100万次)运行每个循环的迭代,将一些变量设置为当前字母。
字符数组为7.7秒,字符串为9秒。
“如果您正在寻找特定元素怎么办?” 我浏览了每个变量,看看'z'是否在元素中。 char数组花了1.8秒而不是字符串0.4秒。
“那很有意思,也许这只是一个任务?” 我的最后一个测试是在没有分配任何东西的情况下迭代。 同样,char数组比3.9秒与字符串迭代的5.3秒相比更快。
因此看起来Strings在初始创建和搜索方面更快(我也假设排序,但我不打算编写排序函数来查找),而字符数组对于迭代事件更快(对于每个数组中的数组) /串)。
希望这有帮助。
PS - 我的第一个测试类的代码:
#!/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))