代码之家  ›  专栏  ›  技术社区  ›  user283145

通过引用内联函数传递\uum128i对象是否会导致这些对象移动到堆栈中?

  •  1
  • user283145  · 技术社区  · 14 年前

    我正在用SSE2内部函数为8x16位向量编写转置函数。由于该函数有8个参数(8x16位大小的矩阵),所以我只能通过引用传递它们。编译器是否会对此进行优化(我的意思是,这些对象是否会以寄存器而不是堆栈的形式传递)?

    代码段:

    inline void transpose (__m128i &a0, __m128i &a1, __m128i &a2, __m128i &a3,
                           __m128i &a4, __m128i &a5, __m128i &a6, __m128i &a7) {
        ....
        }
    
    3 回复  |  直到 14 年前
        1
  •  2
  •   David Rodríguez - dribeas    14 年前

    现在,inline是一个提示,因此编译器可以决定不实际内联调用,然后您必须遵循Zan的建议,实际检查编译后的代码是什么样子。

        2
  •  3
  •   Zan Lynx    14 年前

    谁能说呢?

    为什么不编译它并查看反汇编呢?只有这样才能确定。

        3
  •  0
  •   Paul R    14 年前

    请注意,此限制仅适用于Windows和MSVC(++)(您可能应该相应地标记您的问题)。

    我还没有用C++和引用来尝试过,但是使用MSVC和指针这样的内联,编译器似乎可以优化间接的方向。这可能与C++引用相同,但正如另一篇海报指出的,你应该查看生成的代码来检查。