我想在运行时通过汇编指令强制将字符串动态分配到局部变量中,没有字符串占用数据部分中的内存(例如读取只有数据部分)。
以下似乎完美地工作:
char foo[] = "bar";
汇编代码变为:
movl $7496034, 40(%esp)
因此,foo
在运行时通过 movl
指令用 "bar"
初始化。
我怎样才能强制它发生在所有字符串操作上?
例如,如果我将字符串文字传递给函数:
testfunc("bar");
在这种情况下,字符串"bar"
将被分配到一个节中。
最佳答案
您展示的技术仅适用于您的特殊情况。通常,编译器可以随意将字符串的内容放入段中。例如,通过这个小调整:
char foo[] = "bar\0";
该字符串现在将出现在只读数据部分。
知道该技术不能保证始终有效,您可以使用宏来自动执行该技术,这样您就可以将字符串传递给函数,而无需使用指向只读部分的指针。
#define string_invoke(Func, Str) \
[]() -> decltype(Func(NULL)) { \
char foo[] = Str; \
return Func(foo); \
}()
关于C++ gcc 字符串内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30146332/