免费发布信息网站大全666,如何做影视网站,站长平台,南昌租房网#x1f308; 个人主页#xff1a;白子寰 #x1f525; 分类专栏#xff1a;C打怪之路#xff0c;python从入门到精通#xff0c;数据结构#xff0c;C语言#xff0c;C语言题集#x1f448; 希望得到您的订阅和支持~ #x1f4a1; 坚持创作博文(平均质量分82)#… 个人主页白子寰 分类专栏C打怪之路python从入门到精通数据结构C语言C语言题集 希望得到您的订阅和支持~ 坚持创作博文(平均质量分82)分享更多关于深度学习、C/Cpython领域的优质内容希望得到您的关注~ 目录
前言
C 或 C 为什么要有内存管理
C/C 内存分布
C语言中动态内存管理方式
malloc
calloc
realloc
free
C内存管理方式(与C语言对比)
前奏
new/delete 操作内置类型
new/delete 操作自定义类型
new 和 delete 的实现原理
编辑
定位new表达式 前言 C 或 C 为什么要有内存管理 C和C需要内存管理的原因是 为了有效地控制动态内存分配与回收防止内存泄漏和野指针确保程序运行效率和稳定性。 C/C 内存分布
C/C将这些代码和变量等存在哪
代码段存储可执行程序的代码和只读常量数据段存储已初始化的全局变量和静态变量堆用于程序运行时动态内存分配从低地址向高地址增长栈又叫堆栈存储非静态局部变量/函数参数和返回值等从高地址向低地址增长
那看看以下staticVar、localVal、char2、pChar3、ptr等存放在哪
int globalVar 1;
static int staticGlobalVar 1; int main()
{static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] abcd; const char* pChar3 abcd; int* ptr1 (int*)malloc(sizeof(int) * 4); int* ptr2 (int*)calloc(4, sizeof(int));int* ptr3 (int*)realloc(ptr2, sizeof(int) * 4);free(ptr1);free(ptr3);return 0;
} C语言中动态内存管理方式
具体使用看该篇文章这里简述保姆级教学 - C语言 之 动态内存管理
malloc 分配内存开空间 calloc 开空间并初始化 realloc 对开空间的大小进行灵活调整 free 释放动态内存开辟的空间 C内存管理方式(与C语言对比)
前奏
在学习C语言我们是怎么开辟新空间和释放掉的 虽说C兼容C语言那来到C了还是得升级一下的
那C是如何申请和释放空间的呢
new/delete 操作内置类型 小结 malloc 开空间 new 开空间并初始化 new/delete 操作自定义类型 new 和 delete 的实现原理 new的原理(operator new)先申请空间再调用构造delete的原理先调用析构再(operator delete)释放空间new T[N]的原理(operator new[] -(实际上是operator new))先申请空间再调用N次构造delete T[N]的原理先调用N次析构再(operator delete[] -(实际上是operator delete))释放空间 定位new表达式 定位new表达式允许在已分配的内存上执行构造函数以初始化对象。 通常使用new操作符为对象动态分配内存。 为了优化性能有时会采用内存池技术通过malloc分配一大块内存。内存池减少了与堆的交次数提高了内存分配效率。 对于通过malloc分配的自定义类型内存必须使用定位new来手动调用构造函数。 ***********************************************************分割线*****************************************************************************完结 感谢浏览和阅读。 等等等等一下分享最近喜欢的一句话: “相信相信的力量我就是我自己的神”。 我是白子寰如果你喜欢我的作品不妨你留个点赞关注让我知道你曾来过。 你的点赞和关注是我持续写作的动力 好了划走吧。