当前位置: 技术问答>linux和unix
一个问题,关于kmalloc分配的内存和编译器自动分配的内存的问题(堆和栈)
来源: 互联网 发布时间:2016-04-16
本文导语: 我们知道,kmalloc分配的内存在堆中,编译器给变量自动分配的内存在栈中,但是我现在就出现了一个问题 kmalloc分配的内存可以用来进行dma传输,而在栈中的变量就不能用进行dma传输,这是为什么? 我用的是网卡的dm...
我们知道,kmalloc分配的内存在堆中,编译器给变量自动分配的内存在栈中,但是我现在就出现了一个问题
kmalloc分配的内存可以用来进行dma传输,而在栈中的变量就不能用进行dma传输,这是为什么?
我用的是网卡的dma,只要写进变量的首地址(都已经转换成物理地址)以及长度,它就能够进行传输,但是变量没用kmalloc分配内存,就不能用它的地址进行传输!
是否因为堆和栈转换成物理地址是不连续的?还是其他原因?
kmalloc分配的内存可以用来进行dma传输,而在栈中的变量就不能用进行dma传输,这是为什么?
我用的是网卡的dma,只要写进变量的首地址(都已经转换成物理地址)以及长度,它就能够进行传输,但是变量没用kmalloc分配内存,就不能用它的地址进行传输!
是否因为堆和栈转换成物理地址是不连续的?还是其他原因?
|
栈空间在退出函数的时候就回收了,而堆则不会。
|
用来做DMA的内存不能Cache, 编译器给变量自动分配的内存会使用cache。 如果CPU没有MMIO的话,申请到的内存一般都是连续的