我有分配器eallocator
,它管理具有执行权限的内存。在 C ++ 11 std::vector
中有std::vector::data()
成员函数,它返回指向基础元素数组的指针。我将一些数据放入数组中,如果我用body调用运算符,则将其视为可执行代码:
static_assert(std::is_floating_point< F >::value, "F is not floating-point value type");
F result_;
__asm("call *%1"
: "=&t"(result_)
: "r"(code_.data())
: "memory", "%ax", "%st(1)", "%st(2)", "%st(3)", "%st(4)", "%st(5)", "%st(6)", "%st(7)"
);
return result_;
我得到代码执行的结果(总是单个浮点值)。
但是当我尝试返回类型T
的结构时,它包含来自某个函数的std::vector< std::uint8_t, eallocator< std::uint8_t > > code_
字段并将其放在T const
局部变量中,我会得到不合需要的重新分配code_
底层内存(违反 rip-relative address 代码中的所有偏移量。)
我应该怎么做才能避免这种情况?如何将本地struct变量从calle移动到调用者的本地struct变量而不在成员字段中重新分配?