当前位置:  技术问答>linux和unix

堆空间申请问题

    来源: 互联网  发布时间:2016-07-14

    本文导语:  大家好,下面这段代码 struct aiocb myaiocb; memset(&aiocb , 0x00 , sizeof(myaiocb)); myaiocb.aio_fildes = fd; myaiocb.aio_buf = new char[1024]; myaiocb.aio_nbytes = 1024; 关于空间申请的问题 在C中一般都是用kmalloc 和 vmalloc 而C++中一般使...

大家好,下面这段代码
struct aiocb myaiocb;
memset(&aiocb , 0x00 , sizeof(myaiocb));
myaiocb.aio_fildes = fd;
myaiocb.aio_buf = new char[1024];
myaiocb.aio_nbytes = 1024;

关于空间申请的问题
在C中一般都是用kmalloc 和 vmalloc
而C++中一般使用new

请问在LINUX内核驱动中,使用new是否能用?
还是上面这段程序有问题?
查了好多资料都没找到这样的用法
希望各位大虾指点指点
谢谢

|
C++的new是语法。如果没有记错,C++有自己默认的内存管理方式,可以通过重载new操作来实现自己的内存管理,所以在内存管理方面,存在一个与OS接口的问题(通常被C++默认的内存管理处理掉),最终还是用了OS的malloc吧。记得在effective C++(或者C++ primier?)有提过这个问题。
C的k/vmalloc是API。两种不同的东西。内核有自己的内存管理机制,k/vmalloc是它的一个组成部分,不用它的话,内存管理就混乱了。

|


内核当然不认识 new , 

内核当中连 libc 都没有 , 何况是 stdlib .

内核没有库, 所有的调用都是自己实现的。

|


将memset(&aiocb , 0x00 , sizeof(myaiocb));改为 memset(&myaiocb , 0x00 , sizeof(myaiocb));

试试

|


我认为是的。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3