需要一个表来记录用户输入,但我们不知道用户会输入多少数据。
(1)如果定义的数组太大,会浪费内存。
(2)如果定义太小,又不够用。
问:怎么办?够用了,但一点也不浪费?
系统中有一个内存管理器(MM,MemoryManager),它负责管理一堆不活动的内存。它就是为了解决此类问题而设计的。
MM提供的服务:应用程序可以向MM请求(借出)指定大小的内存,然后在使用后释放(归还)它。
当应用程序使用malloc时,必须将返回值转换为目标类型。
这个内存和数组没有本质的区别,它们的使用是一模一样的。
首先需要计算所需内存空间的字节数
示例表:
释放时需要小心,因为在for之后循环执行完毕,p地址前进了10,所以需要先减10再释放p,否则会有问题
//销毁时,不需要只释放一次。误分配几个字节后,你会释放其中的一些,无论char类型还是int类型
free(p);
在一个函数中动态分配的内存,这个内存在另一个函数中使用。function
(1)MM是系统级的东西,所有应用程序都向同一个MM请求内存。
(2)什么是贷款?确实,当内存被借出时,MM只是简单地标记它所管理的内存,表明该内存已被占用。比如它记录了每个占用的内存段(首地址,长度)
(p0,n0)(p1,n1)(p2,n2)...
(3)MM很慷慨:①只要有人分配,就同意借出。②如果你不归还,他们绝不会无偿向你要。
(4)MM管理的内存区域称为“堆”Heap
这意味着用户程序必须及时感到空闲,才能不耽误其他的使用应用程序。如果有一个应用程序不断进行内存分配而不是释放自身,它最终会耗尽MM中的内存。当MM用完空闲内存时,malloc返回NULL,表明内存已耗尽。
再次强调:malloc后,申请应尽快释放!
使用原则:需要时再申请,不需要时立即释放
实际上,MM识别借出的内存块
(p0,n0)(p1,n1)(p2,n2)...
内部保证了两个内存块不会重叠””,即不会出现重叠,一块内存不会同时借给两个应用程序。
所以每个内存块在释放时的首地址是不同的,只需要指定首地址
对象引用的一块内存
示例:用Citizen代表公民,用Car代表汽车他没有汽车。一开始,但将来他可能会有一个
那这算“及时”吗?
MM中的可用内存。是有限的。当你使用它时,你应该尽快归还它,因为其他应用程序也需要MM的内存。
只借不还。经过一些积累,MM没有更多可用内存,因此malloc返回NULL。
如果要退款,必须全额退款,否则MM无法处理。
原因是:MM可能没有空闲内存。此时可用。(虽然这种情况一般不会出现)
一旦释放,内存返回给MM,该内存就不再可用了(无效)
也不是不需要释放在同一功能中,该版本在应用程序的任何角落都有效。
也就是说:一旦这块内存被错误分配,它就完全由你支配
功能:将s中当前位置后面的n个字节(typedefunsignedintsize_t)替换为ch。并返回s
参数:
参数:
功能:从src指向的内存区域复制n个字节到dest指向的内存区域。
memmove()函数与memcpy()相同。区别在于:当dest
和src指向的内存空间重叠时,memmove()仍然可以处理,但执行效率比较低的memcpy()要高
1.首先打开Linux命令窗口,可以使用键盘快捷键Ctrl+Alt+T打开。
2、现在查看当前Linux系统内存使用情况,使用命令:Free-m,总内存,已用内存,free空闲内存。
3、接下来的操作,首先需要高级用户权限,输入命令:sudo-i,确认后输入高级用户密码。
4.现在复制文件以增加内存使用量(即已使用的使用量)。输入命令:cp-r/etc~/
上一篇:内存条备用是怎么释放
下一篇:内存使用率60要不要加内存