微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 node* newNode=new node() 中,这里的 new 正好返回了谁的地址?

如何解决在 node* newNode=new node() 中,这里的 new 正好返回了谁的地址?

node* newNode=new node();

这里的node是一个典型的链表节点类,newNode是用来动态创建一个包含int datanode* next属性的新节点的指针。请准确说明 new 关键字返回哪个地址并存储在此处的 newNode 中?

例如在 int* p = arr[n]; 中,arrarr[0] 的地址是专门存储的。

解决方法

当您指定 new 关键字时,会发生很多幕后情况。 “new 关键字返回哪个地址”的上下文不是主要关注的问题,您需要知道程序(更具体地说是进程)如何通过操作系统处理内存。

什么是过程?

进程不仅仅是一个程序代码,有时也称为文本部分;它还包括由 program counter 的值和处理器寄存器的内容表示的当前活动。

一个过程一般包括:

  1. 进程栈,包含函数参数、返回地址和局部变量等临时数据。

  2. 数据部分,其中包含全局变量。

  3. 进程还包括一个堆区域(这对您的问题很重要),这是在进程运行时动态分配的内存。

memory management by a process

如何动态分配内存?

new 操作符使用该内存创建对象,然后返回一个包含已分配内存地址的指针。

  new int; // dynamically allocate an integer. 

大多数情况下,我们会将返回值分配给我们自己的指针变量,以便稍后访问分配的内存。

 int *ptr{ new int }; 

然后我们可以通过指针执行间接访问内存:

  *ptr = 7; 

还有几点要说:

  1. 当您通过 new 关键字请求一些内存时,操作系统首先从 heap 区域(如上所述)搜索满足您的要求所需的空闲内存,如果操作系统找到内存,它被分配给你的变量。

  2. 当您处理完您的进程后,该进程本身会将内存返回给操作系统,以便其他程序的进程可以使用它。

参考:SILBERSCHATZ、GALVIN 和 GAGNE 的操作系统概念。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。