标签: c++ pointers memory
C ++中以下两个代码之间的内存使用方面是否存在差异?
int *val = new int(5);
和
int val = 5;
答案 0 :(得分:5)
是的,您的第一个示例至少需要sizeof(int*)(在自动存储中)+ sizeof(int)(在动态存储中)。内存管理也可能存在开销。
sizeof(int*)
sizeof(int)
您的第二个示例仅需要sizeof(int),最终可能会被完全省略(通过优化),具体取决于其使用方式。
答案 1 :(得分:3)
" C ++中以下两个代码的内存使用方面是否存在差异?"
当然,你的第一个例子会泄漏记忆,除非你在不再需要它之后再没有给delete val;打电话。
delete val;
关于你的第二个样本,你可能想要阅读关于RAII成语的内容(虽然只处理简单的int值,但结果都是微不足道的。)
int
注意c ++ new的处理方式与java或c#语言相同,没有垃圾收集器。
new