1、C/C++内存分布


2、C语言中动态内存管理方式:malloc/calloc/realloc/free
void Test ()
{
int* p1 = (int*) malloc(sizeof(int));
free(p1);
int* p2 = (int*)calloc(4, sizeof (int));
int* p3 = (int*)realloc(p2, sizeof(int)*10);
free(p3);
}
3、C++内存管理方式
int main()
{
int* p1 = (int*)malloc(sizeof(int));
int* p2 = new int;
int* p3 = (int*)malloc(sizeof(int) * 10);
int* p4 = new int[10];
free(p1);
free(p3);
delete p2;
delete[] p4;
int* p5 = new int(1);
int* p6 = new int[10] {1, 2, 3};
int* p7 = new int[10] {};
delete p5;
delete[] p6;
delete[] p7;
return 0;
}
class A
{
public:
A(int a = 0)
: _a(a)
{
cout << "A():" << this << endl;
}
~A()
{
cout << "~A():" << this << endl;
}
private:
int _a;
};
struct ListNode
{
ListNode* _next;
int _val;
ListNode(int val = 0)
:_val(0)
, _next(nullptr)
{}
};
int main()
{
A* p1 = (A*)malloc(sizeof(A));
A* p2 = new A;
A* p3 = new A(3);
delete p2;
delete p3;
A* p4 = new A[10];
delete[] p4;
A aa1;
A aa2;
A* p5 = new A[10]{ aa1,aa2 };
delete[] p5;
A* p6 = new A[10]{ A(1),A(2) };
delete[] p6;
A* p7 = new A[10]{ 1,2 };
ListNode* n1 = new ListNode(1);
ListNode* n2 = new ListNode(2);
ListNode* n3 = new ListNode(3);
ListNode* n4 = new ListNode(4);
ListNode* n5 = new ListNode(5);
n1->_next = n2;
n2->_next = n3;
n3->_next = n4;
n4->_next = n5;
delete n1;
delete n2;
delete n3;
delete n4;
delete n5;
return 0;
}
4、operator new与operator delete 函数
5、new和delete的实现原理
【1】内置类型
【2】自定义类型
6、定位new表达式(placement-new)
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
class A
{
public:
A(int a = 0)
:_a(a)
{
cout << "A()" << endl;
}
~A()
{
cout << "~A()" << endl;
}
private:
int _a;
};
int main()
{
A* p1 = (A*)operator new(sizeof(A));
new(p1)A(2);
p1->~A();
operator delete (p1);
return 0;
}
7、malloc/free和new/delete的区别