1.内存分布
2.C与C++内存管理的区别
(1)C++中如果是申请内置类型对象或者数组,malloc和new没什么区别,new和malloc都可用于申请动态内存,new是一个操作符,malloc是一个函数 (2)如果时自定义类型,区别很大,new和delete是开空间+初始化 析构清理+释放空间,malloc和free仅仅是开空间+释放空间 (3)建议在C++中,无论是内置类型还是自定义类型的申请释放,尽量使用new和delete (4)C++中,有多少个值就会调用多少次构造函数与析构函数 (5)new和malloc都是保留字,需要头文件支持,需要头文件malloc.h,只是平时这个头文件已经被其他头文件所包含了,用的时候很少单独引入 (6)delete不加[],编译不会报错,也不会造成内存泄漏,建议针对数组释放使用delete[],如果是自定义类型,不使用方括号就会运行时错误
struct ListNode
{
ListNode* _next;
ListNode* _prev;
int _val;
ListNode(int val = 0)
:_next(nullptr)
, _prev(nullptr)
, _val(val)
{
cout << "ListNode(int val = 0)" << endl;
}
};
int main()
{
struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode));
free(n1);
ListNode* n2 = new ListNode(5);
delete n2;
struct ListNode* arr3 = (struct ListNode*)malloc(sizeof(struct ListNode)*4);
free(arr3);
ListNode* arr4 = new ListNode[4]{1,2,3,4};
delete[] arr4;
int* p1 = new int(0);
int* p2 = new int[4]{1, 2, 3, 4};
return 0;
}
内存管理
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
int* p2 = new int[10];
free(p1);
delete[]p2;
int* p3 = (int*)malloc(sizeof(int));
int* p4 = new int;
free (p3);
delete p4;
return 0;
}
3.应用
malloc/new最大能申请多大的空间?如何malloc出4G的空间?
int main()
{
void* p1 = malloc(1024 * 1024 * 1024);
void* p1 = malloc(1024 * 1024 * 1024 * 1.5);
void* p1 = malloc(1024 * 1024 * 1024* 1.8);
void* p1 = malloc(1024 * 1024 * 1024 * 1.9);
void* p2 = malloc(0xffffffff);
cout << p1 << endl;
return 0;
}
|