アライメントアロケータ その弐
こちらでアライメントされてるvectorのvectorがコンパイルエラーになるけれどカスタムアロケータならいけるのか聞かれたので早速実験してみるテスト
#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. そして自分ははてな記法をぜんぜん覚えないようです・・・