将本地结构从被调用者移动到调用者而无需在字段中重新分配

时间:2013-03-02 18:25:44

标签: c++ memory-management g++ move-semantics

我有分配器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变量而不在成员字段中重新分配?

0 个答案:

没有答案