C++ gcc 字符串内联

标签 c++ gcc g++ inline

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

以下似乎完美地工作:

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/

相关文章:

使用-std=gnu99 和内联函数时的编译错误

c++ - 是否可以通过 clang 和 gcc 支持构建 boost?

c++ - g++ 在 Windows 命令提示符下不工作。已安装 Cygwin

c++ - 在C++中存储未知大小的表

c++ - 如何注册/注销 DLL/OCX 而无需在 VB6 中向 regsvr32 生成 shell

c++ - 从 c++ (windows) 中调用一个 exe

c++ - 运行时错误 : map/set iterators incompatible

c++ - 如何在宏定义中连接 __func__ 和 __LINE__

c++ - Erwin Unruh 的例子在今天行得通吗?

C++ switch 语句不允许我使用多个 "or"?什么?