new と malloc によるメモリの動的確保について
初めて投稿させて頂きます。よろしくお願い致します。
現在、以下のような、2次元配列による動的なメモリの確保を意図して、コードをC/C++にて記述しています。
(コンパイラはMINGW32のg++ 3.4.5)
//mallocによるメモリ動的確保
data = (char **)malloc(num * sizeof(char*));
for(i=0; i<rowNum; i++){
data[i] = (char *)malloc(sizeof(char)*256);
}
//newによるメモリ動的確保
data = new char*[rowNum];
for(i=0; i<rowNum; i++){
data[i] = new char;
}
C++で書くのならば、
「mallocによるメモリ確保は辞め、newによるメモリ確保をしなさい」
という指摘が、書籍でもwebでもありましたので、
両方書き、両者を比べているのですが、理由がイマイチ分かりません。
10万行ほどのテキストデータで実験させてみたのですが、
mallocによる記述の方が、動作が数秒速いようなのです。
それで、new やmalloc で実際何をやっているのか、コードを見ようと思ったのですが、
newでは、
void* operator new(std::size_t) throw (std::bad_alloc);
void* operator new[](std::size_t) throw (std::bad_alloc);
void* operator new(std::size_t, const std::nothrow_t&) throw();
void* operator new[](std::size_t, const std::nothrow_t&) throw();
inline void* operator new(std::size_t, void* __p) throw() { return __p; }
inline void* operator new[](std::size_t, void* __p) throw() { return __p; }
というnewファイルの記述で行き詰まり、
malloc は malloc_allocator.hというファイルで行き詰りました。
以上を踏まえて、
1)そもそも、上記のメモリ動的確保記述はスマートな書き方なのか
2)実際に、newやmallocは、どういった手法でメモリ領域を確保しているのか
以上の2点について、ご教授下さい。よろしくお願い致します。
お礼
とても参考になりました。 ありがとうございました。