【发布时间】:2012-12-12 03:40:41
【问题描述】:
在我的 C 应用程序中,我有一个类似这样的日志记录方法:
void logError(const char* module, const char* message, ... );
调用此方法时,调用者通常会执行以下操作:
logError("foo", "bar");
// or even
#define FOOMODULE "foo"
logError(FOOMODULE, "bar");
无论char* 模块如何传入,char* 都是存储在应用程序二进制文件中的静态内存。
我的问题是,编译器/链接器是否将静态声明的字符串的所有实例折叠成一个声明?因此,假设比较我的静态声明字符串的指针 ("foo" == FOOMODULE) 将始终按预期工作是否有效(当然,假设字符串 与我上面的示例中的 等效并且两者都确实在应用程序的二进制文件中静态分配)?
我正在研究一种在日志消息进入时对其进行过滤的方法。例如,也许我只想查看来自单个“模块”的日志消息。在决定是否要实际打印给定的日志消息时,最好比较指针而不是字符串中的每个字节。
谢谢!
【问题讨论】:
标签: c memory-management static