天天看点

C++笔记——malloc基本用法

int *p = (int*)malloc(4);

malloc 包含在“malloc.h”头文件中

 (int*)强制类型转换

  malloc函数只有一个形参,并且形参是整型

4 表示请求系统为本程序分配4个字节

  malloc函数会为我们分配内存,只能返回第一个字节地址

  该行代码分配了8个字节,p变量占4个字节,p所指向的内存也占4个字节

  p本身所占的内存是静态的,p所指向的内存是动态分配的

free(p)表示把p所指向的内存给释放掉,p本身是静态的,不能由程序员手动释放

int *p; p = (int*)malloc(sizeof(int) * 128); //分配128个(可根据实际需要替换该数值)整型存储单元,malloc申请的是虚拟内存,并不是物理内存 //并将这128个连续的整型存储单元的首地址存储到指针变量p中 double *pd = (double*)malloc(sizeof(double) * 12); //分配12个double型存储单元, //并将首地址存储到指针变量pd中

第一、malloc 函数返回的是 void * 类型。 对于C++,如果你写成:p = malloc (sizeof(int)); 则程序无法通过编译,报错:“不能将 void* 赋值给 int * 类型变量”。 所以必须通过 (int *) 来将强制转换。而对于C,没有这个要求,但为了使C程序更方便的移植到C++中来,建议养成强制转换的习惯。 第二、函数的实参为 sizeof(int) ,用于指明一个整型数据需要的大小。

malloc()函数其实就在内存中找一片指定大小的空间,然后将这个空间的首地址范围给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址,这要看malloc()函数中参数size的具体内容。我们这里malloc分配的内存空间在逻辑上连续的,而在物理上可以连续也可以不连续。对于我们程序员来说,我们关注的是逻辑上的连续,因为操作系统会帮我们安排内存分配,所以我们使用起来就可以当做是连续的。

可以通过malloc(size_t)函数调用申请超过机器物理内存大小的内存块。 内存泄漏一般是指程序申请了一块内存,使用完后,没有及时将这块内存释放,从而导致程序占用大量内存。 无法通过内存释放函数free(void*)直接将某块已经使用完的物理内存直接还给操作系统。