おいふぉりーのぶろぐ

きっと趣味のブログに違いないです!!

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

配列の placement new にハマる

C++では配置 new (placement new) という, すでに確保したメモリから new する方法があるのですが, 配列の placement new がちょっと予想外の挙動をしたのでメモ.

class my_item { my_item(); ~my_item(); ... };

typedef unsigned char byte;
byte data[1024];

my_item *p = new (data) my_item[10];

というコードで, ポインタ data より p の値が 4 バイト分大きくなる. という現象が発生.

C++ ラビリンスさんによると, 配列の割り当てではこのようなオーバーヘッドがあるそうです. で, 今組んでるプログラムのコードを次のように書き換えです.

書き換え前

template <class Value>
inline void construct_array(Value *data, size_t size)
{
  new (data) Value[size]; //  placement new を使用
}

書き換え後

template <class Value>
inline void construct_array(Value *data, size_t size)
{
  for (size_t i = 0; i < size; ++i)
  {
    new (data) Value; //  placement new を使用
    ++data;
  }
}
  1. 2010/10/10(日) 18:55:05|
  2. ソフトウェア開発
  3. | トラックバック:0
  4. | コメント:0
<<ロジテックのUVCカメラドライバのプロパティに直接アクセスするには? | ホーム | [玄箱T4]システムクロック誤差大によりNTPサーバーが同期しないことの対処>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://tm86eublog.blog42.fc2.com/tb.php/259-dff91cb4
この記事にトラックバックする(FC2ブログユーザー)

来客数

プロフィール

Euphorie

Author:Euphorie
"おいふぉりー"って呼んでくださいな☆
ハードウェアとかソフトウェアとかの開発に興味があったり。。。
連絡先は上の画像。

最近の記事

最近のコメント

最近のトラックバック

月別アーカイブ

カテゴリー

ブロとも申請フォーム

この人とブロともになる

ブログ内検索

RSSフィード

リンク

このブログをリンクに追加する

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。