考虑以下代码:
bool isFoo(const char* bar) {
return !strcmp(bar, "some_long_complicated_name");
}
此处,字符串文字 "some_long_complicated_name"
立即传递给 strcmp
。这是否意味着每次调用 isFoo
时,都会相应地在该堆栈帧上分配该字符串文字的许多字节?如果真是这样,那岂不是:
const char FOO_NAME[] = "some_long_complicated_name";
bool isFoo(const char* bar) {
return !strcmp(bar, FOO_NAME);
}
更有效率?
最佳答案
不,它们并非低效。它们通常放置在已编译二进制文件的只读内存部分,因为它们的大小在编译时已知,并且在运行时无法修改。
字符串的昂贵部分(就运行时性能而言)是内存分配。在 isFoo
的两个版本中,都没有发生内存分配,所以我认为很难衡量两者之间的性能差异。 FOO_NAME
从技术上讲在某处占用了一些字节,但很可能会被编译器优化掉。
Here都是编译器资源管理器上的两个版本。 -O3
的程序集并不相同,但老实说,我无法进一步利用这些结果。
关于c - 匿名字符串文字效率低下吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57002159/