使用指针VS而不使用指针的内存分配

时间:2016-08-17 20:08:45

标签: c++ pointers memory

C ++中以下两个代码之间的内存使用方面是否存在差异?

int *val = new int(5);

int val = 5;

2 个答案:

答案 0 :(得分:5)

是的,您的第一个示例至少需要sizeof(int*)(在自动存储中)+ sizeof(int)(在动态存储中)。内存管理也可能存在开销。

您的第二个示例仅需要sizeof(int),最终可能会被完全省略(通过优化),具体取决于其使用方式。

答案 1 :(得分:3)

  

" C ++中以下两个代码的内存使用方面是否存在差异?"

当然,你的第一个例子会泄漏记忆,除非你在不再需要它之后再没有给delete val;打电话。

关于你的第二个样本,你可能想要阅读关于RAII成语的内容(虽然只处理简单的int值,但结果都是微不足道的。)

注意c ++ new的处理方式与语言相同,没有垃圾收集器。