zoukankan      html  css  js  c++  java
  • (转)栈、堆和静态存储区

    一、内存基本构成
    可编程内存在基本上分为这样的几大部分:静态存储区、堆区和栈区。他们的功能不同,对他们使用方式也就不同。
    1> 静态存储区:内存在程序编译的时候就已经分配好,这块内存在整个计算机内存中位于较低的地址,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。
    2> 栈区:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限,栈内存存储数据是从高地址往低地址存储。
    3> 堆区:亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在适当的时候用free或delete释放内存。动态内存的生存期可以由我们决定,如果我们不释放内存,程序将在最后才释放掉动态内存。 但是,良好的编程习惯是:如果某动态内存不再使用,需要将其释放掉,否则,我们认为发生了内存泄漏现象。堆内存一般处于内存较低的地址(但是堆内存的内存地址高于静态内存区的内存地址),堆内存存储数据是从低地址往高地址存储数据.
    二 注意
    【规则1】用malloc 或new 申请内存之后,应该立即检查指针值是否为NULL。防止使用指针值为NULL 的内存。
    【规则2】不要忘记为数组和动态内存赋初值。防止将未被初始化的内存作为右值使用。
    【规则3】避免数组或指针的下标越界,特别要当心发生“多1”或者“少1”操作。
    【规则4】动态内存的申请与释放必须配对,防止内存泄漏。
    【规则5】用free 或delete 释放了内存之后,立即将指针设置为NULL,防止产生“野指针”。


    作者:NAVER_say_NAVER
    链接:https://www.jianshu.com/p/156fb7adde87
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    阅读第十到十二章有感
    程序测试学习之5.2作业
    作业五——封装
    作业4 阅读《构建之法》第6 第7章有感
    汉堡包~~~
    作业3 阅读《构建之法》1-5章
    结对子实验——小学生四则运算
    小学生四则运算程序
    学会提问(转)
    error of “omission” and “commission”
  • 原文地址:https://www.cnblogs.com/vvull/p/10873503.html
Copyright © 2011-2022 走看看