【问题标题】:Array in a memory-constrained system内存受限系统中的数组
【发布时间】:2011-01-12 09:13:40
【问题描述】:

考虑我的系统有内存,但是分散在不同的地方(碎片化)。没有四个连续的内存位置是空闲的。在那种情况下,如果我在 C 语言中声明一个大小为 10 的字符数组,会发生什么?

【问题讨论】:

    标签: c arrays memory memory-management programming-languages


    【解决方案1】:

    如果“我的系统有内存,但是分散在不同的地方(碎片化)”表示heap virtual memory是碎片化的,“声明一个大小为10的字符数组” 表示,您在stack memory 中创建大小为 10 的字符数组:

    char str[10];
    

    ,则数组创建成功。

    如果“声明一个大小为 10 的字符数组” 意味着您使用 malloc() 分配内存(在堆中分配):

    char *str2;
    str2 = (char*) malloc(10 * sizeof(char));
    

    ,然后 malloc() 将返回 NULL。

    【讨论】:

      【解决方案2】:

      如果您的所有内存(包括堆栈)都像这样分段,您要么有一个支持非连续堆栈的编译器(或运行时系统)——在这种情况下,它可能也足够聪明,可以支持不连续的数组——或者基本上你所做的一切(比如调用子程序)都会导致堆栈溢出并使你的程序崩溃。

      【讨论】:

      • 好的。感谢您的答复。因此,如果出现碎片堆栈,支持非连续堆栈的编译器似乎可以解决问题。 gcc 是否支持非连续堆栈?你能告诉我一个支持非连续堆栈的好编译器风格吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2012-09-22
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 2015-08-11
      • 2013-04-12
      相关资源
      最近更新 更多