21 个解决方案
#1
ioremap,不过这个是linux内核的函数,应用层是木有办法获得大片连续物理空间的
#2
ioremap,这个不是io映射的吗,还有好像可以用__get_free_page,不过不会用啊,有没用过的啊,
#3
关注等正确解答
#4
malloc申请的是连续的吧好像?malloc(size*num) 这个是num个连续的地址空间吧。
#5
看看这个,是否对你有帮助:
http://blog.163.com/toplcx@yeah/blog/static/92667383201041764320433/
http://blog.163.com/toplcx@yeah/blog/static/92667383201041764320433/
#6
windows? linux?
windows参考VirtualAlloc
windows参考VirtualAlloc
#7
内存是给os管起来的,你没办法从os那里获得大片连续的物理内存. get_free_page也是,通常不能超过64KB,vmalloc到时可以获得很大的空间,但是和malloc一样面临地址不连续的问题.
#8
内核态这种事情好办,用kalloc或者DMA相关的接口比如dma_zalloc_coherent,楼主可以考虑下用户态有没有与之对应的接口哦!
#9
mlock/munlock,VirtualLock/VirtualUnlock锁定后的内存应该是连续的;
#10
实模式编程?禁止 mmu?
#11
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
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
#12
realloc
#13
哦 我错了
#14
calloc可以申请出n个连续的内存空间
#15
要想使用物理内存是不容易的,在Windows下,驱动程序,可以获取
连续的非分页内存,基本上可以看成是连续的物理内存。
另外进行DMA操作的时候,一定要使用连续的物理内存,这些只有驱动程序才有能力做到,普通的 exe程序要想使用 连续的,大块的物理内存是很 困难的。
另外进行DMA操作的时候,一定要使用连续的物理内存,这些只有驱动程序才有能力做到,普通的 exe程序要想使用 连续的,大块的物理内存是很 困难的。
#16
言之有理。
参考《深入解析Windows操作系统-Windows Internals》
内存管理相关内容。
#17
为什么要申请连续的呢,一般用链表不也可以吗
#18
一般常用的有以下:
应用程序一般使用VirtualAlloc, HeapAlloc, malloc和new申请内存和堆栈
应用程序一般使用VirtualAlloc, HeapAlloc, malloc和new申请内存和堆栈
#19
连续物理内存?你那是干什么用的啊,不会是驱动吧?还是表述有问题?
#20
malloc realloc是我所知全部
#21
如果要分配大量的连续物理内存,get-free-pages,kmem_cache_alloc,kmalloc、vmalloc、ioremap都不能满足,应该用BootMemory函数,在linux内核引导阶段来预留部分内存。
#1
ioremap,不过这个是linux内核的函数,应用层是木有办法获得大片连续物理空间的
#2
ioremap,这个不是io映射的吗,还有好像可以用__get_free_page,不过不会用啊,有没用过的啊,
#3
关注等正确解答
#4
malloc申请的是连续的吧好像?malloc(size*num) 这个是num个连续的地址空间吧。
#5
看看这个,是否对你有帮助:
http://blog.163.com/toplcx@yeah/blog/static/92667383201041764320433/
http://blog.163.com/toplcx@yeah/blog/static/92667383201041764320433/
#6
windows? linux?
windows参考VirtualAlloc
windows参考VirtualAlloc
#7
内存是给os管起来的,你没办法从os那里获得大片连续的物理内存. get_free_page也是,通常不能超过64KB,vmalloc到时可以获得很大的空间,但是和malloc一样面临地址不连续的问题.
#8
内核态这种事情好办,用kalloc或者DMA相关的接口比如dma_zalloc_coherent,楼主可以考虑下用户态有没有与之对应的接口哦!
#9
mlock/munlock,VirtualLock/VirtualUnlock锁定后的内存应该是连续的;
#10
实模式编程?禁止 mmu?
#11
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
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
#12
realloc
#13
哦 我错了
#14
calloc可以申请出n个连续的内存空间
#15
要想使用物理内存是不容易的,在Windows下,驱动程序,可以获取
连续的非分页内存,基本上可以看成是连续的物理内存。
另外进行DMA操作的时候,一定要使用连续的物理内存,这些只有驱动程序才有能力做到,普通的 exe程序要想使用 连续的,大块的物理内存是很 困难的。
另外进行DMA操作的时候,一定要使用连续的物理内存,这些只有驱动程序才有能力做到,普通的 exe程序要想使用 连续的,大块的物理内存是很 困难的。
#16
言之有理。
参考《深入解析Windows操作系统-Windows Internals》
内存管理相关内容。
#17
为什么要申请连续的呢,一般用链表不也可以吗
#18
一般常用的有以下:
应用程序一般使用VirtualAlloc, HeapAlloc, malloc和new申请内存和堆栈
应用程序一般使用VirtualAlloc, HeapAlloc, malloc和new申请内存和堆栈
#19
连续物理内存?你那是干什么用的啊,不会是驱动吧?还是表述有问题?
#20
malloc realloc是我所知全部
#21
如果要分配大量的连续物理内存,get-free-pages,kmem_cache_alloc,kmalloc、vmalloc、ioremap都不能满足,应该用BootMemory函数,在linux内核引导阶段来预留部分内存。