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

sup*_*per 3 c string

考虑以下代码:

bool isFoo(const char* bar) {
    return !strcmp(bar, "some_long_complicated_name");
}
Run Code Online (Sandbox Code Playgroud)

在这里,字符串文字"some_long_complicated_name"立即传递给strcmp。这是否意味着每次都isFoo被调用,因此在该堆栈帧上分配了该字符串文字的许多字节?如果是这样,不是吗:

const char FOO_NAME[] = "some_long_complicated_name";
bool isFoo(const char* bar) {
    return !strcmp(bar, FOO_NAME);
}
Run Code Online (Sandbox Code Playgroud)

更有效率?

lub*_*bgr 7

不,它们不是没有效率的。通常将它们放置在已编译二进制文件的只读存储器部分中,因为它们的大小在编译时就已知道,并且在运行时无法修改。

字符串的昂贵部分(就运行时性能而言)是内存分配。在的两个版本中isFoo,都没有发生内存分配,因此我假设很难衡量两者之间的性能差异。FOO_NAME从技术上讲,它在某处占用了一些字节,但是很可能会被编译器优化。

是编译器资源管理器上的两个版本。与的程序集-O3并不相同,但是说实话,我无法进一步利用这些结果。