Qt/C++编译器字符串常量内联



我目前正在优化我的程序以使用运行时内存。我有很多位置正在写入文件并且已经知道文件路径。这就是为什么我将文字定义如下:

const QString BLUE_LED = "/sys/class/leds/main:blue/trigger";

我可以通过这样做来优化它以更好地内联:

const char* const BLUE_LED = "/sys/class/leds/main:blue/trigger";

我正在将此文字与具有这些构造函数的类 QFile 一起使用:

QFile(const QString &name, QObject *parent)
QFile(QObject *parent)
QFile(const QString &name)

我正在使用的编译器标志:

-c -pipe  -O2 -pipe -g -feliminate-unused-debug-types

我怀疑整体文件大小会下降,但是内存使用量会在几分之一秒内增加,因为为了构建 QFile,将从const char* const构建中间 QString。这个假设正确吗?有没有办法以某种方式跟踪这些隐含的结构,而不是监视程序内存使用情况?

  1. 您可以使用 QStringLiteral 包装文件名,但请注意,这在 .rodata 中比字符串文字占用更多内存。

  2. 如果您必须不惜一切代价减少内存使用量,您可以使用

    FILE *fopen(const char *path, const char *mode);
    

    ,然后使用

    bool QFile::open(FILE *fh, OpenMode mode, FileHandleFlags handleFlags = DontCloseHandle)
    

最新更新