【发布时间】:2014-02-20 16:59:02
【问题描述】:
我有这个功能可以在OpenGL 中打印二维文本
void Text2D::printText(const BMfont &font, const char *text, const PenList &pen_list);
我有几个应用程序(游戏)经常使用它,但我从来没有向它传递一个空字符串但是现在。我使用的大部分string 是std::string::c_str()。
此外,我还有这些变体用于空值检查(或空字符串检查)。
if (text[0] == '\0') return; // # 1
if (text == '\0') return; // # 2
if (text == nullptr) return; // # 3
这将是调用函数Text2D::printText()时执行的第一条指令
除# 1 外,所有这些检查都会导致大约 50% 的 CPU 使用率。我很确定是这样,这对我来说很奇怪。
这三个有什么区别?我认为# 1 和# 2 是相同的,我认为# 3 会将nullptr 转换为'\0'?为什么 # 2 和 # 3 占用过多的 CPU 资源?检查空C-string的正确和安全方法是什么?
【问题讨论】:
-
我不确定是哪个工具向您报告了此问题,但该工具一定是错误的。跟随指针并测试某事将比仅测试某事慢。
-
@BillyONEal 没听懂。我使用
taskmgr.exe的Windows XP作为CPU 使用检查的工具。 -
taskmgr对于 1 或 2 条指令的差异不够准确。这里正在发生其他事情。 (例如,正如我在下面所说,如果答案“字符串为空”允许您跳过一堆昂贵的代码,第一个检查字符串是否为空,后两个检查空指针。时间差将来自昂贵的代码块,而不是这个测试。) -
@BillyONEal ahm,我在
glfw3中渲染了2D 文本,我知道FPS 锁定为60。但是为什么CPU 使用率会累积到50%? -
@EdS。我一次包含这些代码,所以它们不会同时执行。
标签: c++ null cpu-usage cstring overhead