C++ 如何重复利用一个内存地址块
#include<iostream>
using namespace std;
const int size = ;
double buf[size] = {}; int main(int argv ,char * args[]) { double *p1,*p2;
p1 = new double[size];
p2 = new (buf)double[size];
for (int i = ; i < size; i++) {
p1[i]=p2[(i+)%size]=i+;
cout << "p1== " << &p1[i] << " p1[i]=="<<p1[i]<<" "<< endl;
}
cout << "---------------华丽丽的分割线-----------------------" << endl;
for (int i = ; i < size; i++) {
cout << "p2== " << &p2[i] << " p2[i]==" << p2[i] << " " << endl;
}
cout << "---------------一大波内存袭来!-----------------------" << endl;
double *p3, *p4;
p3 = new double[size];
p4 = new (buf)double[size];
for (int i = ; i < size; i++) {
p3[i] = p4[(i + ) % size] = i + ;
cout << "p3== " << &p3[i] << " p3[i]==" << p3[i] << " " << endl;
}
cout << "---------------华丽丽的分割线-----------------------" << endl;
for (int i = ; i < size; i++) {
cout << "p4== " << &p4[i] << " p4[i]==" << p4[i] << " " << endl;
}
cout << "###################华丽丽的分割线########################" << endl;
//数组指针
double *p[] = {p1,p2,p3,p4};
for (int i = ; i < ; i++)
for (int j = ; j < size; j++) {
cout << "p["<<i<<"]== " << &p[i][j] << " p["<<i<<"]"<<"["<<j<<"]==" << p[i][j] << " " << endl;
} for (int i = ; i < ; i++) {
//释放new创建的内存
if (p[i]!=buf) delete [] p[i] ;
}
cout << "内存释放之后" << endl;
for (int i = ; i < size; i++) { cout << "p1== " << &p1[i] << " p1[i]==" << p1[i] << " " << endl;
}
cin.get();
return ;
}
p1== 0038DC28 p1[i]==
p1== 0038DC30 p1[i]==
p1== 0038DC38 p1[i]==
p1== 0038DC40 p1[i]==
p1== 0038DC48 p1[i]==
p1== 0038DC50 p1[i]==
p1== 0038DC58 p1[i]==
p1== 0038DC60 p1[i]==
p1== 0038DC68 p1[i]==
p1== 0038DC70 p1[i]==
---------------华丽丽的分割线-----------------------
p2== 0125C2D0 p2[i]==
p2== 0125C2D8 p2[i]==
p2== 0125C2E0 p2[i]==
p2== 0125C2E8 p2[i]==
p2== 0125C2F0 p2[i]==
p2== 0125C2F8 p2[i]==
p2== 0125C300 p2[i]==
p2== 0125C308 p2[i]==
p2== 0125C310 p2[i]==
p2== 0125C318 p2[i]==
---------------一大波内存袭来!-----------------------
p3== 0038B1F8 p3[i]==
p3== 0038B200 p3[i]==
p3== 0038B208 p3[i]==
p3== 0038B210 p3[i]==
p3== 0038B218 p3[i]==
p3== 0038B220 p3[i]==
p3== 0038B228 p3[i]==
p3== 0038B230 p3[i]==
p3== 0038B238 p3[i]==
p3== 0038B240 p3[i]==
---------------华丽丽的分割线-----------------------
p4== 0125C2D0 p4[i]==
p4== 0125C2D8 p4[i]==
p4== 0125C2E0 p4[i]==
p4== 0125C2E8 p4[i]==
p4== 0125C2F0 p4[i]==
p4== 0125C2F8 p4[i]==
p4== 0125C300 p4[i]==
p4== 0125C308 p4[i]==
p4== 0125C310 p4[i]==
p4== 0125C318 p4[i]==
###################华丽丽的分割线########################
p[]== 0038DC28 p[][]==
p[]== 0038DC30 p[][]==
p[]== 0038DC38 p[][]==
p[]== 0038DC40 p[][]==
p[]== 0038DC48 p[][]==
p[]== 0038DC50 p[][]==
p[]== 0038DC58 p[][]==
p[]== 0038DC60 p[][]==
p[]== 0038DC68 p[][]==
p[]== 0038DC70 p[][]==
p[]== 0125C2D0 p[][]==
p[]== 0125C2D8 p[][]==
p[]== 0125C2E0 p[][]==
p[]== 0125C2E8 p[][]==
p[]== 0125C2F0 p[][]==
p[]== 0125C2F8 p[][]==
p[]== 0125C300 p[][]==
p[]== 0125C308 p[][]==
p[]== 0125C310 p[][]==
p[]== 0125C318 p[][]==
p[]== 0038B1F8 p[][]==
p[]== 0038B200 p[][]==
p[]== 0038B208 p[][]==
p[]== 0038B210 p[][]==
p[]== 0038B218 p[][]==
p[]== 0038B220 p[][]==
p[]== 0038B228 p[][]==
p[]== 0038B230 p[][]==
p[]== 0038B238 p[][]==
p[]== 0038B240 p[][]==
p[]== 0125C2D0 p[][]==
p[]== 0125C2D8 p[][]==
p[]== 0125C2E0 p[][]==
p[]== 0125C2E8 p[][]==
p[]== 0125C2F0 p[][]==
p[]== 0125C2F8 p[][]==
p[]== 0125C300 p[][]==
p[]== 0125C308 p[][]==
p[]== 0125C310 p[][]==
p[]== 0125C318 p[][]==
内存释放之后
p1== 0038DC28 p1[i]==-1.45682e+144
p1== 0038DC30 p1[i]==-1.45682e+144
p1== 0038DC38 p1[i]==-1.45682e+144
p1== 0038DC40 p1[i]==-1.45682e+144
p1== 0038DC48 p1[i]==-1.45682e+144
p1== 0038DC50 p1[i]==-1.45682e+144
p1== 0038DC58 p1[i]==-1.45682e+144
p1== 0038DC60 p1[i]==-1.45682e+144
p1== 0038DC68 p1[i]==-1.45682e+144
p1== 0038DC70 p1[i]==-1.45682e+144
这样,可以对内存进行很好的利用,避免内存泄露。而导致系统运行越来越慢!
C++ 如何重复利用一个内存地址块的更多相关文章
- 理解C指针: 一个内存地址对应着一个值
一个内存地址存着一个对应的值,这是比较容易理解的. 如果程序员必须清楚地知道某块内存存着什么内容和某个内容存在哪个内存地址里了,那他们的负担可想而知. 汇编语法对“一个内存地址存着一个对应的数” ...
- golang中内存地址计算-根据内存地址获取下一个内存地址对应的值
package main import ( "fmt" "unsafe" ) func main() { // 根据内存地址获取下一个字节内存地址对应的值 da ...
- 汇编语言 Part 1——简介、基本语法、内存分段与内存地址
简介 什么是汇编语言? 汇编语言是一种低级的编程语言,在程序的语句和体系结构的机器代码指令之间有很强的对应关系. 每种汇编语言都特定于特定的计算机体系结构,但需要解释或编译.汇编语言也可以称为符号机器 ...
- 16.C语言中数据类型的本质含义是:表示一个内存格子的长度和解析方法。
数据类型决定长度的含义:我们一个内存地址(0x30000000),本来这个地址只代表1个字节的长度,但是实际上我们可以通过给他一个类型(int),让他有了长度(4),这样这个代表内存地址的数字(0x3 ...
- c语言中通过指针将数值赋值到制定内存地址
1.一种直观的方法 假设现在需要往内存0x12ff7c地址上存入一个整型数0x100.我们怎么才能做到呢? 我们知道可以通过一个指针向其指向的内存地址写入数据,那么这里的内存地址0x12ff7c其本质 ...
- [转,讲的非常精彩]CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍)
http://blog.csdn.net/dan15188387481/article/details/49873923 CIDR地址块及其子网划分(内含原始IP地址分类及其子网划分的介绍) 1. ...
- day06 内存地址 小数据池缓存机制
1. 内存相关 示例一 v1=[11,22,33] v2=[11,22,33] #值相等 内存地址不等 v1=11 v2=11 #按理说内存地址应该不等,但是python为了优化使其内存地址相等 v1 ...
- CIDR概述及其地址块计算
CIDR概述 英文:Classless Inter-Domain Routing,中文是:无分类域间路由选择.一般叫做无分类编址. 设计目的:解决路由表项目过多过大的问题. 表示法:{<网络前缀 ...
- C之内存地址
计算机的内存地址 * 32位系统最多能识别4G内存 * 32位系统的地址总线长度是32位的,也就是说能分配给内存地址的数字是 2的32次方个 * 内存中每一个字节都需要一个内存地址 * 一个数字对用一 ...
随机推荐
- python处理字符串时出现的错误'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)" 解决方法
解决办法,在该python文件的前面加上如下几句,问题得到解决. import sys default_encoding = 'utf-8' if sys.getdefaultencoding() ! ...
- GZFramwork数据库层《一》普通表增删改查
运行结果: 使用代码生成器(GZCodeGenerate)生成tb_MyUser的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCode ...
- [CF738D]Sea Battle(贪心)
题目链接:http://codeforces.com/contest/738/problem/D 题意:1*n的格子里有a条长为b的船.有一个人射了k发子弹都没打中船,现在问最少再打多少次一定能保证射 ...
- 苹果原生NSURLSession的上传和下载
关于NSURLSession的上传和下载 在iOS7.0后,苹果公司新推出了一个NSURLSession来代替NSURLConnection.NSURLConnection默认是在 主线程执行的.而N ...
- (一)解决Sublime Text 2中文显示乱码问题
欲解决问题,关键在于让Sublime Text 2支持GB2312和GBK.步骤如下: 1.安装Sublime Package Control. 在Sublime Text 2上用Ctrl+-打开 ...
- 动态替换fragment
// [1]获取手机的宽和高 windommanager WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE); in ...
- [精品推荐]Android Studio插件整理
GOOD 现在Android的开发者基本上都使用Android Studio进行开发(如果你还在使用eclipse那也行,毕竟你乐意怎么样都行).使用好Android Studio插件能大量的减少我们 ...
- JavaScript的事件对象_键盘事件
用户在使用键盘时会触发键盘事件.“DOM2 级事件”最初规定了键盘事件,结果又删除了相应的内容.最终还是使用最初的键盘事件,不过 IE9 已经率先支持“DOM3”级键盘事件. 一.键码 在发生 key ...
- JPA基础
目录 目录 1 一.JPA基础 2 1.1 JPA基础 2 1.2JPA开发过程 3 1.3 实体的生命周期及实体管理器常用方法 4 二.环境搭建 5 2.1 添加JPA支持 6 2.2 添加配置文件 ...
- java源程序---可执行文件(.exe)----安装包
众所周知,java源程序都可以导出为(executable jar file)可执行的.jar文件,但是该.jar文件需要在jre环境下才能执行. 那么如何能在没有装jre的电脑上运行呢?(那就要顺带 ...