//========================================================================
//TITLE:
// malloc、realloc和new你明白了么?
//AUTHOR:
// norains
//DATE:
// Saturday 05-January-2008
//Environment:
// VS2005 + SDK-WINCE5.0-MIPSII
// EVC + SDK-WINCE5.0-MIPSII
//========================================================================
malloc和realloc是C标准函数,而new是C++(www.cppentry.com)的关键字,三者都能动态分配内存.但其中一些有意思的细节,你注意了么
在开篇之前,我们首先需要明确一个概念,数据存储在内存中是无针对性的,换句话说,内存里面的数据,究竟是解释为字符串还是解释为整数,甚至是一个DWORD值还是一个拥有两个WORD的数值,它都是不知道的.如何解释内存中的数据,只和指向这段内存的指针有关.
我们可以用以下代码验证:
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
#define MAX_SIZE_MALLOC 8
BYTE *pBuf = (BYTE *)malloc(MAX_SIZE_MALLOC);
memset(pBuf + 0,0x17,1);
memset(pBuf + 1,0x4f,1);
memset(pBuf + 2,0xBA,1);
memset(pBuf + 3,0x4E,1);
memset(pBuf + 4,0x9B,1);
memset(pBuf + 5,0x52,1);
memset(pBuf + 6,0x00,1);
memset(pBuf + 7,0x00,1);
WCHAR *pStr = (WCHAR *) pBuf;
wprintf(L"Wide-String : %s ",pStr);
int *pInt = (int *)pBuf;
for(int i = 0 ; i < MAX_SIZE_MALLOC / sizeof(int); i ++)
{
printf("pInt[%d]: %d ",i,pInt[i]);
}
free(pBuf);
Sleep(1000);
}
//TITLE:
// malloc、realloc和new你明白了么?
//AUTHOR:
// norains
//DATE:
// Saturday 05-January-2008
//Environment:
// VS2005 + SDK-WINCE5.0-MIPSII
// EVC + SDK-WINCE5.0-MIPSII
//========================================================================
malloc和realloc是C标准函数,而new是C++(www.cppentry.com)的关键字,三者都能动态分配内存.但其中一些有意思的细节,你注意了么
在开篇之前,我们首先需要明确一个概念,数据存储在内存中是无针对性的,换句话说,内存里面的数据,究竟是解释为字符串还是解释为整数,甚至是一个DWORD值还是一个拥有两个WORD的数值,它都是不知道的.如何解释内存中的数据,只和指向这段内存的指针有关.
我们可以用以下代码验证:
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
#define MAX_SIZE_MALLOC 8
memset(pBuf + 0,0x17,1);
memset(pBuf + 1,0x4f,1);
memset(pBuf + 2,0xBA,1);
memset(pBuf + 3,0x4E,1);
memset(pBuf + 4,0x9B,1);
memset(pBuf + 5,0x52,1);
memset(pBuf + 6,0x00,1);
memset(pBuf + 7,0x00,1);
WCHAR *pStr = (WCHAR *) pBuf;
wprintf(L"Wide-String : %s ",pStr);
int *pInt = (int *)pBuf;
for(int i = 0 ; i < MAX_SIZE_MALLOC / sizeof(int); i ++)
{
printf("pInt[%d]: %d ",i,pInt[i]);
}
free(pBuf);
Sleep(1000);
}