1

我有分配器eallocator,它管理具有执行权限的内存。在C++11 std::vector中有std::vector::data()成员函数,它返回指向底层元素数组的指针。我将一些数据放入数组中,如果我用正文调用运算符,则将其视为可执行代码:

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 寻址的代码中的所有偏移量)。

我应该怎么做才能避免这种情况?如何将局部结构变量从被调用者移动到调用者的局部结构变量而不在成员字段中重新分配?

4

0 回答 0