きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

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();
}
  • 1回目
  • 2回目
  • 3回目

freeに50倍以上時間がかかっているみたいです。例えばintではなく1024byteの型を指定すると、

となりました。大きくすると両者の時間差は縮まるようです。単純に量に比例するわけではないようですが、サイズが大きくなるとやはりそれだけ時間がかかるようです。ただし、mallocとfreeでは10倍以上速度が異なるのは変わらないようです。freeはとにかく少量でも重いことが分かりました。

new/deleteでは?

int型で実験してみました。

  • 1回目
    • new: 31286
    • delete: 1243322
  • 2回目
    • new: 22543
    • delete: 1114401

大差はないようです。