怎么申请连续的物理内存空间

星号 2013-05-21 09:22:41
内存从128M换成了256M,写个程序去访问后面空间,本来用malloc来申请,领导说malloc申请的不一定是连续的物理内存空间,好像有一个系统函数能申请一个连续的物理内存空间,有没人知道的啊,
...全文
1225 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿晔sir 2013-05-24
  • 打赏
  • 举报
回复 1
如果要分配大量的连续物理内存,get-free-pages,kmem_cache_alloc,kmalloc、vmalloc、ioremap都不能满足,应该用BootMemory函数,在linux内核引导阶段来预留部分内存。
lsjfdjoijvtghu 2013-05-23
  • 打赏
  • 举报
回复
malloc realloc是我所知全部
Guilty 2013-05-23
  • 打赏
  • 举报
回复
连续物理内存?你那是干什么用的啊,不会是驱动吧?还是表述有问题?
zhaozilan_ly 2013-05-23
  • 打赏
  • 举报
回复
一般常用的有以下: 应用程序一般使用VirtualAlloc, HeapAlloc, malloc和new申请内存和堆栈
明月书君 2013-05-23
  • 打赏
  • 举报
回复
为什么要申请连续的呢,一般用链表不也可以吗
赵4老师 2013-05-23
  • 打赏
  • 举报
回复
引用 15 楼 lm_whales 的回复:
要想使用物理内存是不容易的,在Windows下,驱动程序,可以获取连续的非分页内存,基本上可以看成是连续的物理内存。 另外进行DMA操作的时候,一定要使用连续的物理内存,这些只有驱动程序才有能力做到,普通的exe程序要想使用连续的,大块的物理内存是很困难的。
言之有理。 参考《深入解析Windows操作系统-Windows Internals》 内存管理相关内容。
lm_whales 2013-05-23
  • 打赏
  • 举报
回复
要想使用物理内存是不容易的,在Windows下,驱动程序,可以获取连续的非分页内存,基本上可以看成是连续的物理内存。 另外进行DMA操作的时候,一定要使用连续的物理内存,这些只有驱动程序才有能力做到,普通的exe程序要想使用连续的,大块的物理内存是很困难的。
疯掉的灰太狼 2013-05-22
  • 打赏
  • 举报
回复
calloc可以申请出n个连续的内存空间
lin5161678 2013-05-22
  • 打赏
  • 举报
回复
引用 12 楼 lin5161678 的回复:
realloc
哦 我错了
lin5161678 2013-05-22
  • 打赏
  • 举报
回复
realloc
赵4老师 2013-05-22
  • 打赏
  • 举报
回复
Memory Management Functions The following functions are used in memory management. CopyMemory FillMemory GetProcessHeap GetProcessHeaps GlobalMemoryStatus HeapAlloc HeapCompact HeapCreate HeapDestroy HeapFree HeapLock HeapReAlloc HeapSize HeapUnlock HeapValidate HeapWalk IsBadCodePtr IsBadReadPtr IsBadStringPtr IsBadWritePtr MoveMemory VirtualAlloc VirtualAllocEx VirtualFree VirtualFreeEx VirtualLock VirtualProtect VirtualProtectEx VirtualQuery VirtualQueryEx VirtualUnlock ZeroMemory VLM Functions CopyMemoryVlm FillMemoryVlm GlobalMemoryStatusVlm MapViewOfFileVlm MoveMemoryVlm ReadFileVlm ReadProcessMemoryVlm UnmapViewOfFileVlm VirtualAllocVlm VirtualFreeVlm VirtualProtectVlm VirtualQueryVlm WriteFileVlm WriteProcessMemoryVlm ZeroMemoryVlm Global and Local Functions GlobalAlloc GlobalDiscard GlobalFlags GlobalFree GlobalHandle GlobalLock GlobalReAlloc GlobalSize GlobalUnlock LocalAlloc LocalDiscard LocalFlags LocalFree LocalHandle LocalLock LocalReAlloc LocalSize LocalUnlock
youyou1912 2013-05-21
  • 打赏
  • 举报
回复
windows? linux? windows参考VirtualAlloc
super_admi 2013-05-21
  • 打赏
  • 举报
回复
看看这个,是否对你有帮助: http://blog.163.com/toplcx@yeah/blog/static/92667383201041764320433/
Evlix_Z 2013-05-21
  • 打赏
  • 举报
回复
malloc申请的是连续的吧好像?malloc(size*num) 这个是num个连续的地址空间吧。
N_Sev7 2013-05-21
  • 打赏
  • 举报
回复
关注等正确解答
星号 2013-05-21
  • 打赏
  • 举报
回复
ioremap,这个不是io映射的吗,还有好像可以用__get_free_page,不过不会用啊,有没用过的啊,
AnYidan 2013-05-21
  • 打赏
  • 举报
回复
实模式编程?禁止 mmu?
nadleeh 2013-05-21
  • 打赏
  • 举报
回复
ioremap,不过这个是linux内核的函数,应用层是木有办法获得大片连续物理空间的
lunat 2013-05-21
  • 打赏
  • 举报
回复
mlock/munlock,VirtualLock/VirtualUnlock锁定后的内存应该是连续的;
gqb666 2013-05-21
  • 打赏
  • 举报
回复
内核态这种事情好办,用kalloc或者DMA相关的接口比如dma_zalloc_coherent,楼主可以考虑下用户态有没有与之对应的接口哦!
加载更多回复(1)

69,371

社区成员

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

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