C内存分配
使用C时
如果有一个班级: class MyClass { char memory1bye; int memory4bytes; int another4bytes; }; 这个类在内存中总共使用9个字节…所以,如果我做了类似的事情: MyClass *t1; 这将为我提供Class的可用地址,但是它会分配9个字节吗?它会调用默认构造函数吗? t1 = (MyClass *)new MyClass; 是否会被视为内存泄漏?换句话说,旧地址会发生什么? 解决方法
>正如许多人所说,MyClass的大小取决于实现.在这种情况下,因为类没有方法,所以你基本上有一个结构,所以可以对大小做一些合理的猜测.在没有任何异常编译器标志的普通现代32位机器上,结构的大小将为12个字节;这是因为默认情况下,字段在当前体系结构上与4字节边界对齐.
在64位机器上它可能更大,但如果它大于24字节(即每个字段的8字节对齐),我会有点惊讶.除非明确告知,否则我认为任何事情都不会使用任何大于8字节对齐的字段,并且对字段使用较大的对齐值没有多大意义,因为内存分配函数本身通常具有8字节对齐. (注意:不要指望你的机器是真的!) 实际知道任何东西大小的唯一方法是使用sizeof(MyClass).您几乎不需要在C中使用它,因为新运算符会为您了解并分配所需的空间量.并且如前所述,请记住,任何东西(除了char)的大小都不可移植,即使它们实际上没有无偿变化. 请记住,地址不会泄漏;物体泄漏. 您可以通过在堆栈上创建对象(使用直接的MyClass t1;)并通过引用而不是地址传递它们来缓解内存泄漏;当对象超出范围时,将自动删除该对象.当你有一个对象的生命周期不能很好地耦合到特定范围时,这样做的主要缺点就出现了.那是你使用指针(或智能指针,它以一些限制为代价隐藏大部分细节).真正复杂的代码在垃圾收集方面更好,尽管它有自己的权衡(特别是包括更有可能增加内存消耗;这是Java因为比C更需要内存而闻名的核心原因). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |