/*内存管理与堆栈:
* # 一个由C/C++编译的程序占用的内存分为以下几个部分
* 1.栈区:由编译器自动分配释放,数据先进后出
* 2.堆区:由程序员手动分配释放,数据先进先出,
* new 和 delete,malloc 和 free 配合使用
* 3.全局区,静态区:全局变量和静态变量的存储是放在一块的,
* 初始化的全局变量和静态变量在一块区域,
* 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,
* 程序结束后有系统释放
* 4.文字常量区:常量字符串就是放在这里的
* 5.程序代码区:存放函数体的二进制代码
* # 内存泄漏
* 1.用动态存储分配函数动态开辟的空间,
* 在使用完毕后未释放,
* 结果导致一直占据该内存单元,
* 直到程序结束
* 2.个别的内存泄漏可能不会出现大的问题,
* 但是像在循环函数中忘记释放申请到的内存的话,
* 会榨干系统内存的,
* 到时系统就会出现停止响应等等问题
* 3.指针变量定义时就初始化 nullptr 有助于防止内存泄漏
*/
#include <iostream>
using namespace std;
int main()
{
/*易混淆的概念:
* 1. 声明还是定义?
* 2. & 引用还是取址?
* 3. * 指针还是取值?
*/
extern int x; //前缀 extern,声明 x 而非定义 x,记住不要显示初始化变量
int y = 2; //声明并定义 y,最好习惯于显示初始化变量
int &i = y; //等号左侧 & 与类型名 int 靠近为引用,意为把 y 的值传给 i
int *j = &y; //等号左侧 * 与类型名 int 靠近为指针,等号右侧 & 为取 y 的地址赋予指针变量 j
int z = *j; // j 保存了 y 的地址,等号右侧 * 为取值,由地址 j 取出 y 的值
cout<<"y = "<<y<<endl;
cout<<"i = "<<i<<endl;
cout<<"j = "<<j<<endl;
cout<<"z = "<<z<<endl;
return 0;
}

#include <iostream>
#include <string> using namespace std; void show(string *s); // 函数参数传指针 int main()
{
string c;
c = "ABDEL";
string *p;
p = &c;
show(p);
return 0;
} void show(string *s)
{
cout<<*s<<endl;
}

C++ 内存管理与堆栈的更多相关文章

  1. 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件

    本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...

  2. 全面介绍Windows内存管理机制及C++内存分配实例

    转自:http://blog.csdn.net/yeming81/article/details/2046193 本文基本上是windows via c/c++上的内容,笔记做得不错.. 本文背景: ...

  3. .NET基础拾遗(1)类型语法基础和内存管理基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  4. linux内存管理

    一.Linux 进程在内存中的数据结构 一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分:    1) 代码段:存放CPU执行的机器指令.通常代码区是共享的,即其它执行程 ...

  5. Linux堆内存管理深入分析(上)

    Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全   0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...

  6. 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制

    今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...

  7. MMU内存管理单元相关知识点总结

    1.MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件 ...

  8. 十.oc内存管理

    引用百度百科图 栈(stack)又名堆栈. 栈定义:栈是限定仅在表头进行插入和删除操作的线性表(有序).(又称:后进先出表) (动态)数据展示存储的地方.(举例:升降电梯)特点:先进后出(FILO—F ...

  9. Linux内存管理基本概念

    1. 基本概念 1.1 地址 (1)逻辑地址:指由程序产生的与段相关的偏移地址部分.在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址.( ...

随机推荐

  1. bzoj3224

    学习了下treap #include<iostream> #include<cstdio> #include<cstdlib> using namespace st ...

  2. 通过自定义Attribute及泛型extension封装数据验证过程

    需求来源: 在日常工作中,业务流程往往就是大量持续的数据流转.加工.展现过程,在这个过程中,不可避免的就是数据验证的工作.数据验证工作是个很枯燥的重复劳动,没有什么技术含量,需要的就是对业务流程的准确 ...

  3. mysql-异常

    1.Subquery returns more than 1 row 返回的集合应该是一条才能用,但你返回了多条.

  4. ios 图片点击两次禁止保存或拷贝

    通常当你在手机或者pad上长按图像 img ,会弹出选项 存储图像 或者 拷贝图像,如果你不想让用户这么操作,那么你可以通过以下方法来禁止: img {     -webkit-touch-callo ...

  5. apache ab压力测试

    今天提到压力测试,想起以前看到的ab,于是又重新查找了下资料,并记录了下. ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问. 它的测试目标是基于URL的,因此,既可以用来 ...

  6. 64.GitHub 排名前100的android项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  7. Leetcode 372. Super Pow

    使用公式 c = ab  =>  c mod d = [a mod d * b mod d] mod d 所以a^423 mod d = (a^100)^4 * (a ^10)^2 * a^3 ...

  8. 【BZOJ-1010】玩具装箱toy DP + 斜率优化

    1010: [HNOI2008]玩具装箱toy Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8432  Solved: 3338[Submit][St ...

  9. Linq 101 工具和源码

    工具如图: 源码: https://git.oschina.net/yudaming/Linq101

  10. Android成长日记-使用Intent实现页面跳转

    Intent:可以理解为信使(意图),由Intent来协助完成Android各个组件之间的通讯 Intent实现页面之间的跳转 1->startActivity(intent) 2->st ...