变态的C/C++混合编程中的超自然现象
一句话说清楚的是 new 和 calloc 分配的内存重叠,然后直接上代码:
// entry
int main(int argc, char **argv)
{
class dummy {
public:
char *data;
};
class dummy2 {
public:
int k;
};
dummy *d = new dummy;
d->data = (char *)calloc(4096, 24);
dummy2 *d2 = new dummy2;
d2->k = 1;
// free delete ...
return 0;
}
然后是调试的截图:
很明显,第一个类对象的指针分配总共 4096*24=98304(0x18000)字节
而第二个类的指针分配到的地址就在这块内存块当中,坑我一个晚上把神经网络的矩阵运算代码几千行都检查了几遍
坑爹的微软!
操作系统:Windows7 x64
处理器: Intel 2950M
内存: 8GB DDR4
显卡: NVIDIA GeForce 940M (DircectX 11,CUDA 8.0)