mallocとfree
会社説明会にいってきました。学校がとてもつまらないく思えるほど早く働きたいと思いました。
本題
1万回int型をmallocしてfreeして、その時間を計測してみました。Core i3, Windows7(64bit)でVC++2013/32bitReleaseで実験しています。
int main() { LARGE_INTEGER start, end; int* v[10000]; QueryPerformanceCounter(&start); for(int i = 0; i < 10000; ++i) { v[i] = (int*)malloc(sizeof(int)); } QueryPerformanceCounter(&end); cout << end.LowPart - start.LowPart << endl; QueryPerformanceCounter(&start); for(int i = 0; i < 10000; ++i) { free(v[i]); } QueryPerformanceCounter(&end); cout << end.LowPart - start.LowPart << endl; std::cin.get(); }
freeに50倍以上時間がかかっているみたいです。例えばintではなく1024byteの型を指定すると、
- malloc: 67160
- free: 1782609
となりました。大きくすると両者の時間差は縮まるようです。単純に量に比例するわけではないようですが、サイズが大きくなるとやはりそれだけ時間がかかるようです。ただし、mallocとfreeでは10倍以上速度が異なるのは変わらないようです。freeはとにかく少量でも重いことが分かりました。
new/deleteでは?
int型で実験してみました。
- 1回目
- new: 31286
- delete: 1243322
- 2回目
- new: 22543
- delete: 1114401
大差はないようです。