概要
C++ でメモリを確保する方法にはいろいろとあります
代表的な方法に「new」を使う方法と「malloc」を使う方法があります
今回はそれぞれでメモリを確保してサイズを確認してみました
環境
- CentOS7 7.5.1804
- g++ 4.8.5-28
比較するコード
#include <stdio.h>
#include <iostream>
#include <malloc.h>
int main() {
uint *buf1 = new uint[512];
printf("%lu\n", malloc_usable_size(buf1));
uint *buf2 = new uint[512 * 128];
printf("%lu\n", malloc_usable_size(buf2));
uint *buf3 = (uint *)malloc(512 * sizeof(uint));
printf("%lu\n", malloc_usable_size(buf3));
uint *buf4 = (uint *)malloc(512 * 128 * sizeof(uint));
printf("%lu\n", malloc_usable_size(buf4));
return 0;
}
ビルド
g++ -std=c++11 -o sample sample.cpp
./sample
結果
2056
266224
2056
266224
考察
new の [512]
の部分と malloc の (512 * sizeof(uint))
の部分が同じ値になれば確保されるメモリのサイズも同じのようです
sizeof(uint)
は 4 になるので 512 * 4 = 2048
のメモリが確保されているのが確認できます
もし new と malloc で同じサイズのメモリ領域がほしい場合ですが
new の場合はほしい分のサイズをただ指定すればいいのですが malloc の場合は sizeof(T)
分追加で掛け合わせなければいけないのがポイントかなと思います
最後に
new と malloc で同じメモリ領域を確保する方法を確認しました
ちなみに確保したメモリ領域は解放しないと OOM になります
new は delete で開放し、malloc は free で開放することができます
0 件のコメント:
コメントを投稿