前两天看见一句话:不要轻易的下决定,也不要轻易的改变已作的决定,深有同感。
今天从VC中内存分配引申出几个小问题。
1. 在vc7/crt/src/new.h文件中,有如下语句:
inline void *__cdecl operator new(size_t, void *_P)
{return (_P); }
显然这就是通常所说的placement new了,确实该operator new函数只是简单的返回_P。operator new的第一个参数是sizeof()取得的值,编译器自动加上。
2. 在vc7/crt/src/dbgheap.c中,我们可以看到_CrtDumpMemoryLeak函数负责将所有的内存泄露Dump到Output窗口,当我们双击Output窗口时,代码窗口会自动跳转到内存分配的地方,这是如何做到的呢?实际上这是很简单的,只要OutputDebugString即可,并且输出的string开头应该这样格式"__FILE__(__LINE__)"。
3. vc中数据在内存中是按高位到低位的顺序存放的。比如
int a = 0x12345678;
char* pa = (char*)&a;
我们可以注意到:*pa = 0x78, *(pa+1) = 0x56, *(pa+2) = 0x34, *(pa+3) = 0x12。