gpt4 book ai didi

C++ gcc 字符串内联

转载 作者:可可西里 更新时间:2023-11-01 16:38:09 24 4
gpt4 key购买 nike

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

以下似乎完美地工作:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com