c ++ gcc字符串内联

use*_*889 9 c++ gcc g++ inline

我想强制字符串在运行时通过汇编指令动态分配到局部变量,字符串不占用数据部分中的内存(例如只读数据部分).

以下似乎完美地运作:

char foo[] = "bar";
Run Code Online (Sandbox Code Playgroud)

汇编代码变为:

movl    $7496034, 40(%esp)
Run Code Online (Sandbox Code Playgroud)

因此,在运行时通过指令foo初始化."bar"movl

如何强制它在所有字符串操作中发生?

例如,如果我将字符串文字传递给函数:

testfunc("bar");
Run Code Online (Sandbox Code Playgroud)

"bar"在这种情况下,字符串将在一个部分中分配.

jxh*_*jxh 5

您展示的技术仅适用于您的特殊情况.通常,编译器可以自由地将字符串的内容放入节中.例如,通过这个小调整:

char foo[] = "bar\0";
Run Code Online (Sandbox Code Playgroud)

该字符串现在将显示在只读数据部分中.

知道该技术不能保证始终有效,您可以使用宏来自动化该技术,以便您可以将字符串传递给函数,而无需使用指向只读部分的指针.

#define string_invoke(Func, Str)        \
        []() -> decltype(Func(NULL)) {  \
            char foo[] = Str;           \
            return Func(foo);           \
        }()
Run Code Online (Sandbox Code Playgroud)