说我有这个:

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)不会被破坏。如果其地址未存储在其他任何地方,则将被泄漏。

09-27 14:07