zoukankan      html  css  js  c++  java
  • 堆栈和堆栈大小

     

    正在执行的程序为执行该程序的初始(或主)线程维护一个主堆栈,并为每个从属线程维护不同的堆栈。堆栈是临时内存地址空间,用于保留子程序或函数引用调用期间的参数和自动变量。如果线程堆栈的大小太小,则可能会出现堆栈溢出,从而导致无提示数据损坏或段故障。

    使用 f95 -stackvar 选项编译 Fortran 程序会强制在堆栈中分配局部变量和数组,就好像它们是自动变量。显式并行化的程序暗指对 OpenMP 程序使用 -stackvar,因为该选项可提高优化器将循环中的调用并行化的能力。(有关 -stackvar 标志的讨论,请参见 Fortran 用户指南。)但是,如果为堆栈分配的内存不足,该使用会导致堆栈溢出。

    使用 limit C-shell 命令或者 ulimit Bourne 或 Korn shell 命令可显示或设置初始线程(或主线程)的堆栈大小。一般而言,初始线程的缺省堆栈大小为 8 MB。

    OpenMP 程序的每个从属线程均具有其自身的线程堆栈。此堆栈模拟初始(或主)线程堆栈,但对于线程是唯一的。线程的 PRIVATE 数组和变量(对于线程是局部的)在线程堆栈中分配。在 32 位 SPARC V8 和 x86 平台上,缺省大小为 4 MB;在 64 位 SPARC V9 和 x86 平台上,缺省大小为 8 MB。从属线程堆栈的大小通过 OMP_STACKSIZE 环境变量来设置。

  • 相关阅读:
    团队开发16
    小工具集合Alpha版使用说明
    团队开发15
    《编写有效用例》读后感3
    《编写有效用例》读后感2
    《编写有效用例》读后感1
    《架构漫谈》读后感3
    《架构漫谈》读后感2
    《架构漫谈》读后感1
    SOA设计与应用
  • 原文地址:https://www.cnblogs.com/caozengling/p/5289312.html
Copyright © 2011-2022 走看看