8

クラスメンバーであるポインターに使用しようとしてalignasいますが、率直に言って、どこに置くべきかわかりません。

例えば:

class A
{
private:
    int n;
    alignas(64) double* ptr;    

public:
    A(const int num) : n(num), ptr(new double[num])
    {}
};

これにより、ptr のデータが 64 バイト ブロックに配置されることが保証されました。Intelコンパイラを使用すると、そうではありません。

誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

6

alignas(N)クラスのメンバーでキーワードを使用すると、このメンバーは、潜在的に指されているエンティティではなく、指定された配置に従って配置されます。結局、ポインタを値で初期化するとき、既存のオブジェクトを整列するためのコントロールはありません。

std::align()あなたはどちらがかかるかを見たいかもしれません

  1. 返されたポインターのアラインメントの仕様。
  2. 整列されたブロックのサイズ。
  3. 割り当てられたメモリへのポインター。
  4. 割り当てられたメモリの量。

アラインメントとサイズの両方の要件を満たす十分なスペースがない場合を除き、対応するようにアラインされたポインターを返します。十分なスペースがない場合、関数はヌル ポインターを返します。

于 2014-12-17T20:57:25.810 に答える