谁能够详细说说分配内存和释放内存的过程?

mme 2002-04-05 01:28:21
加精
谁能够详细说说分配内存和释放内存的过程,
请教啦。
...全文
150 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
mme 2002-04-06
  • 打赏
  • 举报
回复
谢谢大家的解答:)
hannibalhontani 2002-04-05
  • 打赏
  • 举报
回复
假如一个链表已经连好
Node是一个节点,有这样的程序:
temp=Node;
delete temp;
为什么会出错
qsyang 2002-04-05
  • 打赏
  • 举报
回复
比如你去打网球,花钱租场地就是分配内存,这块场地归你用,而打完后就相当于释放内存,你在场地上所有的潇洒动作就仅存在记忆中了。
潘李亮 2002-04-05
  • 打赏
  • 举报
回复
在你分配(用 new[])的内存的前面两个字节里,有你分配的内存的大小,C++就可以自动的释放这些内存了。
详细的信息就看 Effcitve C++ Tom Swan's GNU C++ 和 C++ Programing Language。
xiaolun 2002-04-05
  • 打赏
  • 举报
回复
呵呵,new和delete的具体实现是和具体的编译器的C/C++库函数的实现紧密
相关的。VC是一套做法,BCB可能又是一套做法,但只要在Windows平台下,
他们最终都要调用WIN32 API来分配内存的!

至于delete怎么知道我要释放多少字节,太简单了!维护一个简单的数据结构:

struct mem
{
size_t mem_size;
void *mem_ptr;
}

mem_ptr指向通过操作系统调用分配的内存块,mem_size为内存块的大小,
delete(mem_ptr)时,大小为 *((size_t *)(&mem_ptr)-1).呵呵
mme 2002-04-05
  • 打赏
  • 举报
回复
谢谢,
那么delete怎么知道我要释放多少字节呢?
prototype 2002-04-05
  • 打赏
  • 举报
回复
read 'effective c++'. there is a quite detailed explanation about the memory allocation/releasing mechanism. though i can remember which rule it is in?
hcpp 2002-04-05
  • 打赏
  • 举报
回复
我也想听听。
clsfox 2002-04-05
  • 打赏
  • 举报
回复
在C++中用new来分配内存,用delete来释放内存。
C++程序中,局部变量是储存在栈中的,而动态分配的内存是储存在堆中。当使用int *i = new i(9);时操作系统会在内存中分配一个单元来储存这个变量,单元的大小根据操作系统的位数来决定,(16位系统中为2,32位系统中为4),这个储存单元一直到你用delete之前都是存在的,当你使用delete i后,这段内存才被释放。
使用数组时应这样使用delete;
int * d[3] = new d[];
delete []d;
当使用delete后尽量将指针设为空指针。
int * i = new i(9);
delete i;
i = 0;

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧