c - 匿名字符串文字效率低下吗?

标签 c string

考虑以下代码:

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/

相关文章:

c - 使用 (rw-r--r--) 打开 ( ) 文件

c# - 用于删除字符串中符合条件的所有字符的简短 LINQ 语句?

Java 字符串在 SQL 中被错误解释

c# - 如何创建多个列表作为数组?

string - 截断 R 中字符串中的附加\n(换行符)

c - 保存一个程序的输入

c - 为什么旧的 C 语言规范要求预先声明函数局部变量?

c - 决定尝试一下 C 中的自制函数

Java CompareTo 没有返回好的结果

c - 如何在 C 中查找 unsigned char 指针的长度?