C++堆栈生长方向
栈区:临时区
#include <iostream> using namespace std;
#include <stdio.h>
int main()
{
int a=;
int b=;
cout<<"/********************************/"<<endl;
printf("%d\n",&a);
printf("%d\n",&b);
if(&a>&b){
cout<<"down"<<endl;
}else{
cout<<"up"<<endl;
}
int c[];
cout<<"/********************************/"<<endl;
for(int i=;i<;i++){
c[i]=i;
}
cout<<"/********************************/"<<endl;
for(int j=;j<;j++){
printf("%d\n",&c[j]);
}
cout<<"/********************************/"<<endl;
float *p=NULL;
double *q=NULL;
printf("%d\n",p);
printf("%d\n",q);
printf("%d\n",&p);
printf("%d\n",&q); cout<<"/********************************/"<<endl;
return ;
}

结论:&a>&b.先定义的变量a,后定义的变量b。变量a变量b都在临时区。因此栈向下生长的。对于数组地址随着下标越来越大,这是由于栈的生长方向和内存空间buf存放方向是两个不同的概念。
堆区:
#include <iostream> using namespace std;
#include <stdio.h>
#include <stdlib.h>
int main()
{ char *p=NULL;
char *q=NULL;
p=(char *)malloc(*sizeof(char));
q=(char *)malloc(*sizeof(char));
printf("\n%d\n",sizeof(char));
printf("%d\n",&p);
printf("%d\n",&q);
printf("\np[0]:%d", &p[]);
printf("\np[1]:%d", &p[]);
printf("\nq[0]:%d", &q[]);
printf("\nq[1]:%d", &q[]);
if(p!=NULL){
free(p);
}
if(q!=NULL){
free(q);
} return ;
}

结论:先定义的p指针和malloc区,在定义q指针和malloc区。在堆区p[0]比q[0]的大。而且p[1]比p[0]大。可知,堆是向上生长的。
C++堆栈生长方向的更多相关文章
- Cortex-M3双堆栈MSP和PSP+函数栈帧
为了防止几百年以后找不到该文章,特此转载 ------------------------------------------------开始转载--------------------------- ...
- 入门 ARM 汇编(二)—— 寻址方式
忧愁他整天拉着我的心,像一个琴师操练他的琴:悲哀像是海礁间的飞涛:看他那汹涌,听他那呼号!—— 徐志摩·四行诗一首 ilocker:关注 Android 安全(新手) QQ: 2597294287 立 ...
- java面试题复习(二)
//我又回来了 11.数组有没有length()方法?String有没有length()方法? 数组只有length属性,String有length()方法.注意:JavaScript获取字符串长度使 ...
- 《Linux内核分析》课程第一周学习总结
姓名:何伟钦 学号:20135223 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...
- ucos ii 百度官方介绍
μC/OS II(Micro-Controller Operating System Two)是一个可以基于ROM运行的.可裁剪的.抢占式.实时多任务内核,具有高度可移植性,特别适合于微处 ...
- 堆栈帧的组织——C/C++内存管理必须掌握
程序栈 说到堆栈帧,你得先说说程序栈. 记忆功能程序堆栈区是支持操作,通常共享堆. 程序栈通常占领内存区域的下部,而堆用的是上部. 程序栈存放栈帧,栈帧有时候也称为活跃记录或活跃帧.栈帧存放函数參数和 ...
- C++栈和堆的生长方向
C++内存区域分为5个区域.分别是堆,栈,自由存储区,全局/静态存储区和常量存储区. 栈:由编译器在需要的时候分配,在不需要的时候自动清除的变量存储区.里面通常是局部变量,函数参数等. 堆:由new分 ...
- 数据段、代码段、堆栈段、BSS段的区别
进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用 途 不一而不尽相同,有些内存是事先静态分配和统一回收的 ...
- 10.1-uC/OS-III任务堆栈空间
1.设置任务优先级 嵌入式系统中的重要的应用应该被设置为高优先级,一些显示操作就应该被设置为低优先级. 然而, 由于实时系统的复杂性, 在大多数情况下任务的优先级是不能被事先确定的.多数系统中,不是所 ...
随机推荐
- invalid END header (bad central directory offset) 异常解决方法
今天版本升级时,一个ear包在传到aix下,weblogic后启动出现 invalid END header (bad central directory offset) 后来才发下是文件传输中出现了 ...
- Android事件分发机制(一) Touch 事件的分发和消费机制
Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev). ...
- php中好用的时间函数
//查询数据30天的数据$y=date("Y",time());$m=date("m",time());$d=date("d",time() ...
- NHibernate系列文章三:简单的增删改查询
摘要 上一篇文章只完成了简单的NHibernate安装.配置和连接数据库.这篇文章介绍怎样实现最简单的数据库读写操作. 1. 重构ISessionFactory生成过程 将生成ISessionFact ...
- android系统中查看哪些端口被哪些应用打开
1 查看哪些端口开放,netstat 2 根据端口号获取到UID,比如端口号为10050,转成16进制是2742,使用命令grep -i 2742 /proc/net/tcp6,就能看到其UID,假如 ...
- Unix网络编程 -- ubuntu下搭建编译环境( 解决unp.h 编译等问题)
1.安装编译器,安装build-essential sudo apt-get install build-essential 2.下载本书的头文件 下载unpv13e http://ishare.i ...
- sql语句备份
1.新采购需求查询 SELECT p.sku, g.GoodsName, w.WarehouseID, w.WarehouseName, s.FullNameFROM PurchaseRequires ...
- scala 学习心得
scala 安装步骤 文件下载地址:www.scala-lang.org(Please report bugs at https://issues.scala-lang.org/. We welcom ...
- 获取 input 单选框和多选框的值
引用 jQuery的js <script> $(function(){ var arr = new Array(); $('#checkbox').click(function(){ a ...
- 使用Innosetup制作安装包的一些技巧
1. 选择安装界面上的图片 [Setup] ;设置界面上的两个图片 WizardImageFile=WizModernImage.bmp WizardSmallImageFile=WizSmallIm ...