小编wat*_*180的帖子

MSVC - /EHsc vs/EHa(同步与异步异常处理)

你能列出实际差异/暗示的子弹清单吗?我阅读了相关的MSDN文章,但我理解异步异常仍然有点模糊.

我正在使用Boost.Test编写测试套件,我的编译器发出警告,应该启用EHa:

警告C4535:调用_set_se_translator()需要/ EHa

项目本身仅使用普通异常(来自STL)并且不需要/ EHa切换.我是否必须使用/ EHa开关重新编译它以使测试套件正常工作?我的感觉是我只需要/ EHa参加测试.

c++ visual-studio

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

对齐的类型和按值传递参数

通过值传递对齐类型或结构与对齐类型不适用于某些实现.这会破坏STL容器,因为某些方法(例如resize)会按值获取它们的参数.

我使用Visual Studio 2008运行一些测试,并不完全确定何时以及如何通过值失败.我主要担心的是函数foo.它似乎工作正常,但它可能是内联或其他巧合的结果?如果我将其签名更改为void foo(const __m128&)怎么办?

非常感谢您的意见.谢谢.

struct A
{
    __m128 x;
    int n;
};

void foo(__m128);
void bar(A);

void f1()
{
    // won't compile
    // std::vector<A> vec1(3);

    // compiles, but fails at runtime when elements are accessed
    std::vector<__m128> vec2(3);

    // this seems to work. WHY???
    std::vector<__m128, some_16_byte_aligned_allocator<__m128> > vec3(3);

    __m128 x;
    A a;

    // passed by value, is it OK?
    foo(x);

    // won't compile
    //bar(a);
}
Run Code Online (Sandbox Code Playgroud)

编辑.即使使用对齐的分配器,STL也会失败,因为仍然存在按值传递问题.

发现此链接按值传递__m128

c++ stl sse alignment

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

SSE2:双精度日志功能

我需要开源(没有许可限制)日志功能的实现,有签名的东西

__m128d _mm_log_pd(__m128d);
Run Code Online (Sandbox Code Playgroud)

它可以在英特尔短矢量数学库(ICC的一部分)中使用,但ICC既不是免费的也不是开源的.我正在寻找仅使用内在函数的实现.

它应该使用特殊的有理函数近似.我需要的东西几乎与cmath日志一样准确,比如9-10十进制数字,但更快.

c c++ optimization sse simd

10
推荐指数
2
解决办法
2526
查看次数

C++内存对齐问题

一行代码值千言万语:)这是我的问题:

/* Platform specific 16-byte alignment macro switch.
   On Visual C++ it would substitute __declspec(align(16)).
   On GCC it substitutes __attribute__((aligned (16))).
*/
#define ALIGN_16 ...

struct ALIGN_16 A {...};

A* ptr = new A;
A* ptr2 = new A[20];

assert(size_t(ptr) % 16 == 0);

for (int i=0; i<20; ++i)
    assert(size_t(ptr2+i) % 16 == 0);

assert(sizeof(A) % 16 == 0);
Run Code Online (Sandbox Code Playgroud)

我可以期望所有断言都通过SSE支持的平台吗?谢谢.

编辑.部分答案.我用VS2008,GCC和ICC进行了一些测试.MS编译器确实对齐了ptrptr2,但是GCC和ICC未能对齐ptr2.

c++ gcc alignment icc visual-studio

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

将shared_ptr与托管语言引用进行比较

有人可以向C++程序员解释Java(和C#)引用和shared_ptr(来自Boost或来自C++ 0x)之间最重要的区别.

我或多或少知道如何实现shared_ptr.我很好奇以下几个方面的差异:

1)表现.2)骑自行车.shared_ptr可以循环(A和B保持彼此的指针).在Java中可以骑自行车吗?3)还有别的吗?

谢谢.

c# c++ java

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

使用基类方法初始化派生类成员

这合法吗?如果是这样,你认为它是一个好的编码实践吗?

我想做这样的事情(不显示不重要的细节):

class ItemStorage {
    int size() const;
};

class SpecialStorage : public ItemStorage  {
public:
    SpecialStorage (...) : ItemStorage(...), items(ItemStorage::size()) {...}
private:
    int items;
};
Run Code Online (Sandbox Code Playgroud)

如果方法大小不是虚拟的,我很确定它是可以的.如果它是虚拟的并且派生类不会覆盖它怎么办?

c++

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

SSE:将__m128和__m128i转换为两个__m128d

两个相关的问题.

这就是我的代码需要处理相当大量的数据.它在内部循环中完成,性能很重要.

  1. 将__int32的转换和数组转换为双精度数(或将__m128i转换为两个__m128d).
  2. 将浮点数和数组转换为双精度数(或将__m128转换为两个__m128d).

基本上,我需要具有以下签名的功能:

void convert_int_to_double(__int32 const * input, double * output);
void convert_float_to_double(float const * input, double * output);
Run Code Online (Sandbox Code Playgroud)

输入和输出指针是对齐的,元素的数量是4的倍数.主要问题是如何快速将__m128解压缩为两个__m128d.

c c++ optimization sse

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

标签 统计

c++ ×7

sse ×3

alignment ×2

c ×2

optimization ×2

visual-studio ×2

c# ×1

gcc ×1

icc ×1

java ×1

simd ×1

stl ×1