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"在这种情况下,字符串将在一个部分中分配.
您展示的技术仅适用于您的特殊情况.通常,编译器可以自由地将字符串的内容放入节中.例如,通过这个小调整:
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)