C++ 之 new 函数疑问,你们也有这种情况吗?
資深大佬 : sl0000 17
读取 new 出来的对象占用的连续堆内存,偶然发现时有时无的存在一些脏数据,但是通过栈内存分配的对象不会存在脏数据。脏数据的出现与内存对齐优化有关。
new 函数并不会把 sizeof(Cls)的连续内存全部清空,只会清除使用到的内存,内存对齐的空置的内存并不会被清零。
class Cls { Public; long a; char b; long c; char d; }; char s[256] = {}; for (int i = 0; i < 256; i++) { s[i] = 0xff; } Cls * pa = new (s) Cls {1,2,3,4};
(lldb) memory read –size 4 -format x –count 64 pa
用的 Xcode,这种情况是所有平台都会出现吗?如果是,那么这种设计是为什么?
Cls * pa = new (s) Cls ();
经提醒,我改为默认构造函数确实是都被清零了。
大佬有話說 (8)