初学者问题:关于内存操作

vcx 2000-08-21 11:07:00
请问在VC6中操作内存应该使用哪类函数,比如标准C语言库(malloc,free等)、堆API、或虚拟API?
...全文
269 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Holly 2000-08-22
  • 打赏
  • 举报
回复
建议大家都去看一下MSDN中的有关Memory Manage的技术文章;
MSDN\PlatForm SDK\Base Services\Memory;
MSDN\Technical Articles\Windows Platform\Memory;
你就可以真正理解MEM;
Holly 2000-08-22
  • 打赏
  • 举报
回复
VirtualAlloc(Ex)及其相关的函数是与Windows联系最密切的内存功能函数,功能也最为强大;
除了通常的内存申请释放工作;它可以进行跨进程的访问控制;而且只有这一层才充分表现了CPU的内存调度换页功能;才有Reserved和Commit一说;
U皮特U 2000-08-22
  • 打赏
  • 举报
回复
要从堆中分配内存可采用GlobalAlloc系列函数(见下例),适用于分配大内存,我一般采用这种方式处理全局大内存缓冲区,对局部函数中使用的临时内存缓冲,可以简单地用new,delete:
HANDLE handle = GlobalAlloc( GHND, dwMemSize);
char* lpBuf = (char*)GlobalLock( handle);

GlobalUnlock(handle);
GlobalFree(handle);
Holly 2000-08-22
  • 打赏
  • 举报
回复
没有这么简单,通常需要根据情况!
如果在局部使用的临时不定长的内存,但内存的数量不会达到上百兆或千兆的话,使用new-delete 和malloc()--free()都是可以的,实际上new最后会调用malloc(),而且这两种都具有较好的可移植性;
GlobalAlloc()和LocalAlloc()是WINDOWS为了兼容16位的程序保留的函数,新开发的软件一般不要用,除非你还在为WINDOW3.x开发,否则应当尽量使用HeapAlloc()—等HeapFree()--HeapReAlloc()等;
aznarble 2000-08-22
  • 打赏
  • 举报
回复
在MFC中和其他大多数场合通常使用new和delete
有一些特殊的函数如WindowsAPI有时必须使用专用的内存分配命令。
元明 2000-08-22
  • 打赏
  • 举报
回复
在c++中,基本上都是用这两个操作符new,delete.
甚至java,不过其不用delete,因为它有个内存垃圾收集器.
boneheart 2000-08-22
  • 打赏
  • 举报
回复
Ideal说的对,new关键字和delete关键字就能满足一般的应用。Malloc(),GlobalAlloc(),LocalAlloc()只有在和windows系统直接交互时才使用,比如直接控制打印机,EnumPrinter
时,要使用LocalAlloc分派打印结构的内存。VC程序中最常见的就是new_delete这对关键字了。
Ideal 2000-08-21
  • 打赏
  • 举报
回复
一般情况下,用 new 关键字比较好;如果习惯于 C 形式的,也可用 GlobalAlloc() 或 LocalAlloc() 两个函数(因为二者在 32 位下基本一样)。此为我的浅见。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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