zoukankan      html  css  js  c++  java
  • 程序中的一些限制(基于Linux系统C语言)

    今天突然想起来几个问题,在程序运行起来时,存在一些限制:

    1,数组的长度(成员的个数)存在限制!(数组定义的空间大小)
    2,一个进程里打开的文件数。
    3,一个文件的名字的长度。
    4,一个进程里创建线程的个数。

    数组的长度(成员的个数)存在限制!

      宏观上的限制因素:

        首先,如果要确定一个数组的最大长度,我们需要知道它的数据类型,因此,数组的数据类型是其中一个限制因素。因为不同数据类型的元素大小不同。很显然(我们假设int为4字节,char为1字节),数据类型为char的数组的最大长度是类型为int的数组的4倍。

        另外,我们不难想到,大小(size)的数据类型,也就是数组下标的数据类型,其实也是一个限制因素。在C/C++中,数组下标的类型是std::size_t,因此数组的大小首先不能超过size_t所能表示的大小。这个数据类型是在库文件stdio.h中通过typedef声明的,对于32位程序它被定义为unsighed int,对于64位程序定义为unsigned long。前者能表示的最大大小为2^32-1,后者为2^64-1。

      微观上的限制因素:

        函数内申请的变量,数组,是在栈(stack)中申请的一段连续的空间。栈的默认大小为2M或1M,开的比较小。
        全局变量,全局数组,静态数组(static)则是开在全局区(静态区)(static)。大小为2G,所以能够开的很大。
        而malloc、new出的空间,则是开在堆(heap)的一段不连续的空间。理论上则是硬盘大小。

    一个进程里打开的文件数

      这个一般都是1024。Linux上使用命令     ulimit -n   可以查看。

    一个文件的名字的长度

           在x86_64 Linux下,文件名的最大长度是255个字符(characters),文件路径的最大长度是4096字符(characters)。

    一个进程里创建线程的个数

        可以用ulimit -s命令来查看大小(一般常见的有10M或者是8M)。我们还知道,一个进程的虚拟内存是4G,在Linux32位平台下,内核分走了1G,留给用户用的只有3G,于是我们可以想到,创建一个线程占有了10M内存,总共有3G内存可以使用。于是可想而知,最多可以创建差不多300个左右的线程。

    注:ulimit -a 查看程序中的所有限制

  • 相关阅读:
    Sublime Text配置Python开发利器
    Python字符进度条
    安装和使用的django的debug_toolbar
    Python数组合并
    django创建项目
    Python的闭包
    Python获取对象的元数据
    Python的枚举类型
    Django的Model上都有些什么
    Git使用相关
  • 原文地址:https://www.cnblogs.com/wzqstudy/p/10273626.html
Copyright © 2011-2022 走看看