在linux内核下,写模块,数组的大小是否有限制

在linux内核下,写模块,数组的大小是否有限制,第1张

不管物理内存多大,只要是32位的,内核栈就是8K;64位的,内核栈就是16K。

而且这个8k的内核栈,还要存放task_struct(2.6中存放thread_info),因此栈中数据不可能如此奢侈的使用。

当然有限制,你可以使用命令 ulimit -s 查看大小。

因为物理空间存在着大小限制,因此栈空间肯定也是有大小限制的,不然程序还不崩了。

甚至,你可以测试一下,分配一个超大的栈空间(方法是,在函数中,定义一个超大空间的数组),然后看是否可以运行,当达到一个限制的时候,程序是无法正常运行的

在MSDN中的array declarations有如下描述:The type of integer required to hold the maximum size of an array is the size of size_t. Defined in the header file STDDEF.H, size_t is an unsigned int with the range 0x00000000 to 0x7CFFFFFF. 也就是说,只要硬件条件许可的条件下,数组的大小可以为0x7CFFFFFF(2G BYTE)。数组所占空间为:count*sizeof(TYPE) , count是数组元素的个数,sizeof(TYPE) 是一个元素所占空间字节数。如果定义数组空间超出2G,VC编译会报错:fatal error C1126: '2G' : automatic allocation exceeds 。。。因此,当实际编程确实需要使用更大的数组时,则要采用动态


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8704642.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-20
下一篇 2023-04-20

发表评论

登录后才能评论

评论列表(0条)

保存