您的位置:程序门 -> c/c++ ->



几个问题来自《c和指针》,基础好的进...


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


几个问题来自《c和指针》,基础好的进...[已结贴,结贴人:guemcit]
发表于:2007-10-04 19:23:27 楼主
这几个问题来自《c和指针》,请大家帮解释一下,谢谢大家了:

1.   c能够声明的数组最大长度为多少?依据什么而定?

2.   动态分配内存,最大能够获得的内存块有多大?

3,当一次请求500个字节的内存时,实际获得的动态分配的内存数量总共有多大?5000字节呢?他们的区别是什么?
发表于:2007-10-04 19:55:411楼 得分:0
第2个问题修改一下  

2.   动态分配内存,一次   最大能够获得的内存块有多大?
发表于:2007-10-04 23:26:452楼 得分:8
学习一下,我认为
1.依栈空间大小而定
2.从malloc的参数来看,最大4gb,不超过堆的大小
3.500+,有一些空间用来保存该块内存的信息
发表于:2007-10-04 23:46:563楼 得分:8
1.   c能够声明的数组最大长度为多少?依据什么而定?  
-----------
语法里好像没限定,如果是在栈上申请的数组,不能超过栈的大小(vc默认1m-2m),否则会栈溢出。
如果是堆上的,一般没什么问题。

2.   动态分配内存,一次   最大能够获得的内存块有多大?
----------
系统分配给进程的堆空间有4gb的大小,

3,当一次请求500个字节的内存时,实际获得的动态分配的内存数量总共有多大?5000字节呢?他们的区别是什么?
----------
不管是500还是5000,实际上使用的空间会多比你申请的字节数多,用于存放相关信息,
发表于:2007-10-05 00:24:434楼 得分:8
1.   c能够声明的数组最大长度为多少?依据什么而定?  
编译器下静态的也就是栈上的内存限制
2.   动态分配内存,最大能够获得的内存块有多大?  
<虚拟内存大小&& <4g
3,当一次请求500个字节的内存时,实际获得的动态分配的内存数量总共有多大?5000字节呢?他们的区别是什么?

struct   bucket_desc   {         /*   16   bytes   */
00053           void                         *page;
00054           struct   bucket_desc     *next;
00055           void                         *freeptr;
00056           unsigned   short             refcnt;
00057           unsigned   short             bucket_size;
00058   };
00059  
00060   struct   _bucket_dir   {         /*   8   bytes   */
00061           int                   size;
00062           struct   bucket_desc     *chain;
00063   };

                *the   general   game   plan   is   that   each   page   (called   a   bucket)   will   only   hold
00013     *   objects   of   a   given   size.     when   all   of   the   object   on   a   page   are   released,
00014     *   the   page   can   be   returned   to   the   general   free   pool.     when   malloc()   is
00015     *   called,   it   looks   for   the   smallest   bucket   size   which   will   fulfill   its
00016     *   request,   and   allocate   a   piece   of   memory   from   that   bucket   pool.
00017     *
00018     *   each   bucket   has   as   its   control   block   a   bucket   descriptor   which   keeps  
00019     *   track   of   how   many   objects   are   in   use   on   that   page,   and   the   free   list
00020     *   for   that   page.     like   the   buckets   themselves,   bucket   descriptors   are
00021     *   stored   on   pages   requested   from   get_free_page().     however,   unlike   buckets,
00022     *   pages   devoted   to   bucket   descriptor   pages   are   never   released   back   to   the
00023     *   system.     fortunately,   a   system   should   probably   only   need   1   or   2   bucket
00024     *   descriptor   pages,   since   a   page   can   hold   256   bucket   descriptors   (which
00025     *   corresponds   to   1   megabyte   worth   of   bucket   pages.)     if   the   kernel   is   using  
00026     *   that   much   allocated   memory,   it's   probably   doing   something   wrong.  
发表于:2007-10-05 09:33:025楼 得分:10
首先得说我们编程中应该尽量少用资源,追求“极大”值,永远是一种错误。

1.   c能够声明的数组最大长度为多少?依据什么而定?  
答案:这只和进程最大可给你用的内存有关,一般几百m。因为地址空间内连续的内存不会很多。这个不会有标准答案,因为每个进程的内存布局都不一样,导致连续内存空间不多。我看到的比较强劲的服务器系统中比较大的连续内存大概是100mb左右。64位系统在此会提高很多。

2.   动态分配内存,最大能够获得的内存块有多大?  
同上

3,当一次请求500个字节的内存时,实际获得的动态分配的内存数量总共有多大?5000字节呢?他们的区别是什么?
依据实现,因为操作系统需要在内存开头加一些信息块,不同操作系统不一样。两者没有区别
发表于:2007-10-05 09:34:426楼 得分:0
to   3楼:32位系统中分配给堆空间没有4gb,4gb包括一个进程所有的内存,包括代码段、内核内存、运行栈,给堆的能超过几百m已经很多了。这个不能从malloc来看,你得学操作系统
发表于:2007-10-05 16:35:407楼 得分:8
我只对第2个问题发表看法:

一次最大能申请的动态内存数由函数malloc()中的bucket_dir[]数组设定,
一共最大能申请的动态内存数:4g-code_size(代码)   -   data_size(仅指全局和静态数据)   -   stack_size(栈)   -   arg_size(参数)
发表于:2007-10-09 13:33:188楼 得分:8
1.   c能够声明的数组最大长度为多少?依据什么而定?  
locol-由栈大小决定,否则会溢出
global-由你的系统中内存总共的大小决定

2.   动态分配内存,最大能够获得的内存块有多大?  
一般在32位系统中不超过4gb,因为cpu最大寻址能力所致,当然也不可能超过你的系统的最大ram,另外当前能获得的最大内存要看最体情况的。

3,当一次请求500个字节的内存时,实际获得的动态分配的内存数量总共有多大?5000字节呢?他们的区别是什么?
肯定超过500或5000,区别要看你的系统而定,例如4楼所述。
发表于:2007-10-09 13:33:489楼 得分:0
1.   c能够声明的数组最大长度为多少?依据什么而定?  
locol-由栈大小决定,否则会溢出
global-由你的系统中内存总共的大小决定

2.   动态分配内存,最大能够获得的内存块有多大?  
一般在32位系统中不超过4gb,因为cpu最大寻址能力所致,当然也不可能超过你的系统的最大ram,另外当前能获得的最大内存要看最体情况的。

3,当一次请求500个字节的内存时,实际获得的动态分配的内存数量总共有多大?5000字节呢?他们的区别是什么?
肯定超过500或5000,区别要看你的系统而定,例如4楼所述。


快速检索

最新资讯
热门点击