当前位置:天才代写 > tutorial > C语言/C++ 教程 > 高质量C++/C编程指南-第7章-内存打点(6)

高质量C++/C编程指南-第7章-内存打点(6)

2017-11-07 08:00 星期二 所属: C语言/C++ 教程 浏览:1195

7.10 malloc/free 的利用要点
函数malloc的原型如下:

void * malloc(size_t size);

用malloc申请一块长度为length的整数范例的内存,措施如下:

int *p = (int *) malloc(sizeof(int) * length);

我们该当把留意力会合在两个要素上:“范例转换”和“sizeof”。

u malloc返回值的范例是void *,所以在挪用malloc时要显式地举办范例转换,将void * 转换成所需要的指针范例。

u malloc函数自己并不识别要申请的内存是什么范例,它只体贴内存的总字节数。我们凡是记不住int, float等数据范例的变量简直切字节数。譬喻int变量在16位系统下是2个字节,在32位下是4个字节;而float变量在16位系统下是4个字节,在32位下也是4个字节。最好用以下措施作一次测试:

cout << sizeof(char) << endl;

cout << sizeof(int) << endl;

cout << sizeof(unsigned int) << endl;

cout << sizeof(long) << endl;

cout << sizeof(unsigned long) << endl;

cout << sizeof(float) << endl;

cout << sizeof(double) << endl;

cout << sizeof(void *) << endl;

在malloc的“()”中利用sizeof运算符是精采的气势气魄,但要当心有时我们会昏了头,写出 p = malloc(sizeof(p))这样的措施来。

u 函数free的原型如下:

void free( void * memblock );

为什么free函数不象malloc函数那样巨大呢?这是因为指针p的范例以及它所指的内存的容量事先都是知道的,语句free(p)能正确地释放内存。假如p是NULL指针,那么free对p无论操纵几多次都不会出问题。假如p不是NULL指针,那么free对p持续操纵两次就会导致措施运行错误。

 

    关键字:

天才代写-代写联系方式