C++ 内存管理与堆栈
/*内存管理与堆栈:
* # 一个由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++ 内存管理与堆栈的更多相关文章
- 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
本文背景: 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本 ...
- 全面介绍Windows内存管理机制及C++内存分配实例
转自:http://blog.csdn.net/yeming81/article/details/2046193 本文基本上是windows via c/c++上的内容,笔记做得不错.. 本文背景: ...
- .NET基础拾遗(1)类型语法基础和内存管理基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...
- linux内存管理
一.Linux 进程在内存中的数据结构 一个可执行程序在存储(没有调入内存)时分为代码段,数据段,未初始化数据段三部分: 1) 代码段:存放CPU执行的机器指令.通常代码区是共享的,即其它执行程 ...
- Linux堆内存管理深入分析(上)
Linux堆内存管理深入分析(上半部) 作者:走位@阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘.利用的分析文章层出不穷.从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞 ...
- 深入了解C#系列:谈谈C#中垃圾回收与内存管理机制
今天抽空来讨论一下.Net的垃圾回收与内存管理机制,也算是完成上个<WCF分布式开发必备知识>系列后的一次休息吧.以前被别人面试的时候问过我GC工作原理的问题,我现在面试新人的时候偶尔也会 ...
- MMU内存管理单元相关知识点总结
1.MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件 ...
- 十.oc内存管理
引用百度百科图 栈(stack)又名堆栈. 栈定义:栈是限定仅在表头进行插入和删除操作的线性表(有序).(又称:后进先出表) (动态)数据展示存储的地方.(举例:升降电梯)特点:先进后出(FILO—F ...
- Linux内存管理基本概念
1. 基本概念 1.1 地址 (1)逻辑地址:指由程序产生的与段相关的偏移地址部分.在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址.( ...
随机推荐
- 【BZOJ 3049】【USACO2013 Jan】Island Travels BFS+状压DP
这是今天下午的互测题,只得了60多分 分析一下错因: $dis[i][j]$只记录了相邻的两个岛屿之间的距离,我一开始以为可以,后来$charge$提醒我有可能会出现来回走的情况,而状压转移就一次,无 ...
- 【CodeForces 672B】Different is Good
题 字符串所有子串要不同.求修改最少多少个字符. 因为只能是26个字母,显然大于26的不可能有答案,其它情况ans+=u[i]-1:u[i]是字母出现的次数. #include<cstdio&g ...
- Html一天入门
一.什么是HTML 1.html: HyperText Markup Language 超文本标记语言,是最基础的网页语言,而且都是由标签组成. 2.基本格式: <html> <he ...
- Android中对内存和外存的读写
首先给大家介绍使用文件如何对数据进行存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. public ...
- JS实现打印功能
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ t ...
- Hive 的 map join
学习自 http://blog.csdn.net/xqy1522/article/details/6699740 1. Map Join 的使用场景: 关联操作中有一张表非常小 不等值的链接操作 2. ...
- 【uoj147】NOIP2015—斗地主
http://uoj.ac/problem/147 (题目链接) 题意 打牌... Solution 其实很简单的搜索,当年还是太年轻了.稍微想一想,顺子肯定是要先打掉的,因为顺子所包含的牌最多,所以 ...
- spoj1811 Longest Common Substring
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- Nodejs系列-01-开篇
1.解决什么问题 1. 并发连接 举个例子,想象一个场景,我们在银行排队办理业务,我们看看下面两个模型. (1)系统线程模型: 这种模型的问题显而易见,服务端只有一个线程,并发请求(用户)到达只能处理 ...
- CCTray配置如何添加远程服务器
前提: Windows防火墙必须开通的TCP端口 或者直接把防火墙关闭(不建议) 或者直接在防火墙规则增加CCNET的服务进去 总者,只要确保能telnet ip 21234能通即可 建议全部软件都装 ...