c++单向链表(c++单向链表的创建与操作)

c++单向链表(c++单向链表的创建与操作)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <blockquote> 

讯享网

大家好,我是苏貝,本篇博客带大家了解C++的内存管理,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述
讯享网


在这里插入图片描述

【说明】

  1. 栈又叫堆栈–非静态局部变量/函数参数/返回值等等,栈是向下增长的。
  2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以向上增长的。
  3. 数据段–存储全局数据和静态数据。
  4. 代码段–可执行的代码/只读常量

我们先来看下面的一段代码和相关问题

在这里插入图片描述

问:

在这里插入图片描述

前5个(从左到右):CCCAA
全局变量和static变量放在(数据段)静态区(前3个)
局部变量放在栈区(第四个)
Num1是局部的数组,它的值是首元素地址,局部数组在栈区


后5个(从左到右):AAADAB

前2个:char2是局部的数组,它的值是首元素地址,局部数组在栈区。”abcd”在常量区,实际上是”abcd0”。将”abcd0”赋值给数组,是将常量区的”abcd0”赋值一份到栈区,再让数组指向栈区的“abcd0”(看下图)。char2的值是首元素地址,*char2就是首元素a,在栈区。

在这里插入图片描述

问:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. malloc/calloc/realloc的区别
    malloc开辟的空间不会初始化。calloc开辟的空间会将每个字节初始化为0。realloc可以调整开辟空间的大小(不初始化为0),调大空间:原地扩容(后面有足够空间)或者异地扩容(后面无足够空间,另外找一个足够的连续空间)。


  2. 这里需要free(p2)吗?
    不用,如果要异地扩容,那么realloc会自动free掉p2指向的空间。如果是原地扩容,free(p3)即可。

C语言内存管理方式在C++中可以继续使用,但有些地方就无能为力,而且使用起来比较麻烦,因此C++又提出了自己的内存管理方式:通过new和delete操作符进行动态内存管理。

在这里插入图片描述

new 类型后面没有接[类型个数],默认申请1个该类型的空间

申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用 new[ ]和delete[ ],注意:匹配起来使用。

所以new和malloc的区别在哪里?

  1. 用法上更简洁,如上
  2. 可以控制初始化
    在这里插入图片描述

给多个连续的元素初始化,如果初始值的个数少于元素的个数,那么没有初始值的元素就被初始化为0

  1. 在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与 free不会。

在这里插入图片描述

  1. new失败后会抛异常,不需要我们手动检查

C
在这里插入图片描述
在这里插入图片描述

C++

在这里插入图片描述
在这里插入图片描述


好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️


小讯
上一篇 2025-05-05 21:26
下一篇 2025-06-08 14:13

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/166654.html