小编Tho*_*mas的帖子

将xmm寄存器折叠为标量

我需要能够获取4个打包整数,并使用或操作将它们一个堆叠在一起,形成一个组合整数.

最有效的方法是什么?注意,打包整数中的1将永远不会有一个共同的位置,所以我认为无符号的"添加"也可以做到这一点.

我看到了水平添加指令,但它是用于签名添加的.

x86 assembly sse simd intrinsics

2
推荐指数
1
解决办法
119
查看次数

在堆栈上增加一个数组

这本质上是我的问题.在函数的生命周期中,我生成一些整数,然后在算法中使用整数数组,该算法也是同一函数的一部分.整数数组只能在函数中使用,因此将数组存储在堆栈中自然是有意义的.

问题是我不知道数组的大小,直到我完成生成所有整数.

我知道如何在堆栈上分配固定大小和可变大小的数组.但是,我不知道如何在堆栈上生成数组,这似乎是解决我的问题的最佳方法.我相当确定这可以在汇编中完成,你只需增加堆栈指针并为每个生成的int存储一个int,因此int数组将位于堆栈帧的末尾.这可能在C中做到了吗?

c stack memory-management alloca

1
推荐指数
1
解决办法
219
查看次数

不同类型的分支

所以我对分支的理解是有两种类型:

双向分支,根据存储在寄存器中的某些计算的结果进行分支。昂贵并导致管道冲洗。

单向分支,这就像一个函数指针或一个 goto,它将转到常量地址。如果我弄错了,请纠正我,但我认为这比两个分支便宜得多,因为现代处理器将在管道的早期解决这些指令。

我想象如果存在第三种类型的分支,循环展开会更快。通常,循环展开会增加指令大小,但会避免双向分支。如果您有一个分支,它同时支持指令大小和两个分支,该怎么办。就像一个分支,它会循环一段代码恒定的次数。

存在哪些类型的分支?

cpu x86 assembly processor

1
推荐指数
1
解决办法
2240
查看次数

为什么DLL没有复制到输出目录?C++ Visual Studio

我设置了一个c ++项目来在visual studio中使用DLL.该库有.h .lib和.dll文件.该程序编译并运行,并成功使用该库.DLL放在的根目录中,而不是输出目录中.当我构建时,我希望将DLL从源代码复制到输出目录,但事实并非如此.我在输出目录中看到的只有3个类型,应用程序,增量链接器文件和程序调试数据库的文件.

也许我错了,但我认为DLL需要与输出目录中的可执行文件位于同一文件夹中.发生什么了?

c++ dll visual-studio visual-studio-2015

1
推荐指数
1
解决办法
2243
查看次数

另一个方向的隐含转换

如果无法修改包装类,则包装类很好.使用包装器,我可以添加某些功能和方便,我仍然可以通过使用从包装器到包装类型的隐式转换,使用包装类型的函数接受包装器.像这样的东西:

struct vec {
    __m128 m128;
    inline operator __m128 &() {
        return m128;
    }
    //convenience to add functionality related to the wrapped variable inserted here
}
Run Code Online (Sandbox Code Playgroud)

这很好用.

现在我的问题是,当你无法访问包装类型的源或无法修改它时,你可以隐式地转换从__m128到vec的另一种方式吗?

c++

1
推荐指数
1
解决办法
69
查看次数

如何设置属性的成员?

我有一个像这样的矢量的属性

    public Vector2 TestVector
    {
        get { return testvector; }

        set
        {
            testvector = value;

        }
    }
Run Code Online (Sandbox Code Playgroud)

Vector2有成员X和Y.

当我想将property.x和property.y设置为值时,它不起作用

// this does not work
TestVector.X = 10;
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

编辑:我看到我得到的答案说它是一个结构,但实际上我有一个名为dVector2的组合类,它是一个类类型而不是结构,我使用它.为了简单起见,我只把vector2放在这里,但这种情况适得其反.

c# xna

0
推荐指数
1
解决办法
84
查看次数

如何创建一个可用作外部类中的公共字段的私有嵌套类?

例:

public class BoundingBox
{
    public Vector3Double Positon { get; set; }
    public Vector3Double Apothem { get; set; }
    public ExtremasForX X;

    public BoundingBox(Vector3Double position, Vector3Double size)
    {
        Positon = position;
        X = new ExtremasForX(this);

    }

    private class ExtremasForX
    {
        private BoundingBox box;
        public ExtremasForX(BoundingBox box)
        {
            this.box = box;
        }
        public double Max
        {   
            get { return box.Positon.X + box.Apothem.X ; }
        }
        public double Min
        {
            get { return box.Positon.X - box.Apothem.X; }
        }



    }
}
Run Code Online (Sandbox Code Playgroud)

此代码生成可访问性错误:BoundingBox.X的级别高于其类型.

我想要一个没有公共构造函数的内部类,因为我只希望将该类用作外部类的命名空间.我该怎么做?

c#

0
推荐指数
1
解决办法
73
查看次数

在没有整数转换的情况下在java中操作整数值?

考虑以下

public byte GetAByte()
{
    return (byte)(_globalByte % 13);
}
Run Code Online (Sandbox Code Playgroud)

请注意,以下内容不起作用并引发错误.

    return (_globalByte % (byte)13);
Run Code Online (Sandbox Code Playgroud)

这里mod运算符返回一个整数,需要将其转换回一个字节以使return语句起作用.如果我错了,请纠正我,但我猜测_globalByte在计算模数之前被转换为整数.总的来说,这意味着2次铸造操作.

所以我的问题是为什么基本运算符每次都必须返回一个整数?这是一个特定于java的怪癖,还是以这种方式做到这一点有一些重要性?

java

0
推荐指数
1
解决办法
81
查看次数

在定位x86时,在c ++中进行算术移位的可靠性

所以根据c ++规范

E1 >> E2的值是E1右移E2位位置.如果E1具有无符号类型或者E1具有有符号类型和非负值,则结果的值是E1/2 ^ E2的商的整数部分.如果E1具有有符号类型和负值,则生成的值是实现定义的.

所以它是实现定义的,但是如果我使用的是一个针对x86平台的无错误编译器,并且使用有符号类型进行右移,是否有任何理由怀疑我不会移位有符号位?(x86显然支持算术移位)

c++ x86

0
推荐指数
1
解决办法
85
查看次数

了解用大括号创建的函数文字是如何工作的

从这个答案引用另一个问题

“Scala 有函数和部分函数文字的语法。它看起来像这样”:

{
    case pattern if guard => statements
    case pattern => statements
}
Run Code Online (Sandbox Code Playgroud)

它是如何工作的,在什么情况下你可以创建一个带有括号{}而不是箭头的函数文字=>

scala

0
推荐指数
1
解决办法
55
查看次数