说我有这个:
int *thing;
即使我没有分配任何内存,这是否仍使用4字节的内存?当我分配一些东西(
thing=new int;
)时,它会使用8个字节,因为指针本身可能会占用内存吗?另外,说我有这个:
struct thingy
{
int *intThing;
}
thingy *result=new thingy;
thingy.intThing=new int;
delete thingy;
也会将
intThing
删除,还是将内存悬空而不指向任何内容? 最佳答案
所有变量(原始数字类型,类实例,指针,引用)开始都占用空间。
然后,优化器参与其中,并且可能表明某些存储是冗余的(该值是恒定的,或者始终可以从另一个变量获得,等等)
使变量消失是优化器的明确目标之一,因为它趋于减少寄存器压力,提高缓存性能等。
在您的示例中,指针intThing
将被破坏(它是一个成员,并且成员在其父对象出现时死亡),但是它指向的内存(将被正确地称为*thingy.intThing
而不是thingy.intThing
)不会被破坏。如果其地址未存储在其他任何地方,则将被泄漏。