アライメントアロケータ その弐

こちらでアライメントされてるvectorvectorコンパイルエラーになるけれどカスタムアロケータならいけるのか聞かれたので早速実験してみるテスト

#include <allocator.hpp>
#include <vector>
#include <iostream>

struct hoge
{
	char fuga[16];
};

int main()
{
	typedef 
		std::vector<hoge, risa_gl::aligned_allocator<hoge, 16> >
		aligned_hoge_vector_t;

	std::vector<aligned_hoge_vector_t> v;
	aligned_hoge_vector_t a;

	for (int i = 0; i < 10; ++i)
		a.push_back(hoge());

	for (int i = 0; i < 10; ++i)
		v.push_back(a);

	for (std::vector<aligned_hoge_vector_t>::const_iterator itor =
			 v.begin(); itor != v.end(); ++itor)
		for (aligned_hoge_vector_t::const_iterator hoge_itor = itor->begin();
			 hoge_itor != itor->end(); ++hoge_itor)
			std::cout << (&*hoge_itor) << std::endl;

	return 0;
};

以上がソース。
allocator.hppはこれ
実験される場合は持っていって適当にコンパイルオプションとかで参照できるようにしてください。

mingw-gcc 3.4.2でコンパイルして実行した結果。

0x3d4490
0x3d44a0
0x3d44b0
0x3d44c0
0x3d44d0
0x3d44e0
0x3d44f0
0x3d4500
0x3d4510
0x3d4520
0x3d4550
0x3d4560
0x3d4570
0x3d4580
0x3d4590
0x3d45a0
0x3d45b0
0x3d45c0
0x3d45d0
0x3d45e0
0x3d4620
0x3d4630
0x3d4640
0x3d4650
0x3d4660
0x3d4670
0x3d4680
0x3d4690
0x3d46a0
0x3d46b0
0x3d46e0
0x3d46f0
0x3d4700
0x3d4710
0x3d4720
0x3d4730
0x3d4740
0x3d4750
0x3d4760
0x3d4770
0x3d47b0
0x3d47c0
0x3d47d0
0x3d47e0
0x3d47f0
0x3d4800
0x3d4810
0x3d4820
0x3d4830
0x3d4840
0x3d4870
0x3d4880
0x3d4890
0x3d48a0
0x3d48b0
0x3d48c0
0x3d48d0
0x3d48e0
0x3d48f0
0x3d4900
0x3d4940
0x3d4950
0x3d4960
0x3d4970
0x3d4980
0x3d4990
0x3d49a0
0x3d49b0
0x3d49c0
0x3d49d0
0x3d4a00
0x3d4a10
0x3d4a20
0x3d4a30
0x3d4a40
0x3d4a50
0x3d4a60
0x3d4a70
0x3d4a80
0x3d4a90
0x3d4ad0
0x3d4ae0
0x3d4af0
0x3d4b00
0x3d4b10
0x3d4b20
0x3d4b30
0x3d4b40
0x3d4b50
0x3d4b60
0x3d4300
0x3d4310
0x3d4320
0x3d4330
0x3d4340
0x3d4350
0x3d4360
0x3d4370
0x3d4380
0x3d4390

実行結果、もうちょい何とかしたほうがよかったかも・・・
一応なんとかなってるようです。

で、こうじゃない場合は元のところでもこちらでもいいんでコメントください。


P.S. そして自分ははてな記法をぜんぜん覚えないようです・・・