为什么栈的数组长度必须是一个常量?而堆的数组长度可以是变量

为什么栈的数组长度必须是一个常量?而堆的数组长度可以是变量。为什么栈的大小有限制?

栈区数组长度使用变量会报错

其原因就在于栈是编译器管理的,在程序运行前就已经分配好了空间的大小。而使用变量,编译器无法知道该分配多大的内存空间,于是报错。但堆上的内存是动态创建的,是在程序运行的同时为为它申请内存。(堆里的动态数组,是程序运行过程中动态申请的,而栈不一样,申请的数组长度在编译时就要确定下来,所以必须是确定的数字)

也正因为栈是程序运行前就已经分配好了空间,直接编译为二进制可执行代码,运行时几乎不需要时间,所以栈的运行速度要比堆快。而动态创建是将分配过程从编译器搬到了运行的代码中,相当于将分配内存的耗时从编译阶段转嫁到了机器运行阶段。于是堆的申请耗时,不仅仅跟使用的内存算法有关,还跟运行代码的机器速度有关。

 

 

为什么栈的大小有限制?

为什么栈的数组长度必须是一个常量?而堆的数组长度可以是变量。为什么栈的大小有限制?

编译器对栈区数组的长度有限制。

因为栈的地址空间必须连续,如果任其任意成长,会给内存管理带来困难。对于多线程程序来说,每个线程都必须分配一个栈,因此没办法让默认值太大。

 

相关链接

为什么栈的运行速度比堆快?:为什么栈的效率比堆高?

相关文章:

  • 2022-12-23
  • 2021-10-02
  • 2022-12-23
  • 2022-12-23
  • 2021-07-30
  • 2021-05-21
  • 2021-06-13
  • 2021-10-30
猜你喜欢
  • 2021-11-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-24
  • 2021-06-21
相关资源
相似解决方案