【发布时间】:2010-11-03 12:11:57
【问题描述】:
我可以在 g++ 中将对象的地址作为字符串常量获取吗?示例:
struct s { } x;
如果&x == 1234,那么我的代码中需要"1234"。
编辑:
字符串常量是指我在编译或链接时需要该常量字符串。我需要将它嵌入到这样的内联汇编代码中:
template < typename U >
struct T {
static int x;
void f () {
asm (".word " some-expression-containing-(&x));
}
};
我不知道如何使用预处理器宏构造损坏的名称,所以我问了这个问题。
方案不需要便携,g++就够了。
地址本身在编译或链接时是已知的,因为它可以检查汇编输出并将损坏的名称放入内联汇编指令中。
【问题讨论】:
-
x的地址在编译时(不一定)知道。 -
只需编写一个包含名称的目标文件,然后使用
nm查看生成的目标文件的导出表。这将显示对象的错位名称。 -
@Konrad:我的问题是该对象是一个模板类,我需要为不同的模板参数生成不同地址的代码的多个实例化。必须在目标文件中查找每个可以想象的错位名称并不是一件好事。
-
你不能通过在模板化方法中使用内联程序集来做到这一点吗?
-
FWIW,询问如何获取字符串常量而不是如何获取用于 asm 的变量地址是 XY problem 的示例。
标签: c++ string constants memory-address