链表新增节点时,栈中会每次创建新指针吗?内存占用疑问
链表插入节点的内存疑问解答
你的理解存在误区,核心逻辑说明
你提到的Node* new_node = new Node(new_data);这行代码里,new_node确实是栈上的局部指针,但它的生命周期只限于insertAfter函数的执行过程:
- 函数调用时,栈上会临时分配一个指针的空间(通常是4字节或8字节,取决于系统是32位还是64位);
- 函数执行完毕退出时,这个指针占用的栈空间会被立即回收,不会持续留存。
所以不管你插入多少个节点,栈上都不会累积这些指针,完全不会出现栈空间占用过高的问题。
内存分配的实际情况
new Node(new_data)是在**堆(自由存储区)**上分配节点的实际内存,这块内存会一直保留,直到你手动用delete释放,链表的节点数据都存储在这里;- 栈上的
new_node只是临时用来存储新节点的地址,完成new_node->next = prev_node->next和prev_node->next = new_node这两个链接操作后,它的使命就完成了。函数结束后栈帧弹出,这个指针会直接被销毁。
结论
真正随着节点数量增加而占用内存的是堆上的节点对象,栈上的临时指针只会占用极小的、临时的空间,根本不用担心它会导致内存过高。
内容的提问来源于stack exchange,提问作者Nayan Shenoy
相关产品推荐
相关产品推荐

