C++ new限定区域分配内存

C++中从指定区域分配内存:

#include<iostream>
using namespace std;

const int buf(1024);
char buffer[buf]={0}; //开辟静态区域

//p1,p3作为指针变量在栈区,存储的地址指向堆区
//手动释放内存

//p2,p4作为指针变量在栈区,存储的地址指向静态区
//自动释放内存,用于分配用完了就不会再用的数据
//避免内存泄漏,自动释放内存。牺牲了内存访问独立性,
//从程序输出结果可以看出p2 和p4的地址相同的
void main()
{
	int len=5;
	int *p1,*p2,*p3,*p4;

	p1=new int[len];
	p2= new (buffer)int[len];

	p3=new int[len];
	p4= new (buffer)int[len];//用指定的区域去分配,从buffer首地址开始分配
	cout<<"buffer:"<<&buffer<<endl;
	for(int i=0;i<len;i++)
	{
		*(p1+i)=i+1;
		*(p2+i)=i+2;
		cout<<"p1:"<<(p1+i)<<"  "<<*(p1+i)<<"  p2:"<<(p2+i)<<" "<<*(p2+i)<<endl;

	}
	cout<<endl<<endl;
	for(int i=0;i<len;i++)
	{
		*(p3+i)=i+1;
		*(p4+i)=i+2;
		cout<<"p3:"<<(p3+i)<<"  "<<*(p3+i)<< "  p4:"<<(p4+i)<<" "<<*(p4+i)<<endl;
	}

	delete p1;
	delete p3;
	cin.get();
}

时间: 2024-10-19 01:20:47

C++ new限定区域分配内存的相关文章

深入理解JVM之JVM内存区域与内存分配

深入理解JVM之JVM内存区域与内存分配 在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs.com/hellocsl/p/3969768.html?utm_source=tuicool&utm_medium=referral 看了此博客后,发现应该去深入学习下jvm的内存模型,就是去认真学习下<深入理解Java虚拟机>,其内容可能会<

Jvm(32),理解升级----(挺不错的)图解深入理解JVM之JVM内存区域与内存分配

解释了java中对象的在内存中的模型,学习了对象的内存模型后,对理解多态.参数传递等的理解都有帮助. 前言:这是一篇关于JVM内存区域的文章,由网上一些有关这方面的文章和<深入理解 Java虚拟机>整理而来,所以会有些类同的地方,也不能保证我自己写的比其他网上的和书本上的要好,也不可能会这样.写博客的目的是为了个人对这方面自己理解的分享与个人的积累,所以有写错的地方多多指教. 看到深入两字,相信很多的JAVA初学者都会直接忽略这样的文章,其实关于JVM内存区域的知识对于初学者来说其实是很重要的

深入C语言内存区域分配(进程的各个段)详解(转)

原文地址:http://www.jb51.net/article/39696.htm 一般情况下,一个可执行二进制程序(更确切的说,在Linux操作系统下为一个进程单元,在UC/OSII中被称为任务)在存储(没有调入到内存运行)时拥有3个部分,分别是代码段(text).数据段(data)和BSS段.这3个部分一起组成了该可执行程序的文件 (1)代码段(text segment):存放CPU执行的机器指令.通常代码段是可共享的,这使得需要频繁被执行的程序只需要在内存中拥有一份拷贝即可.代码段也通常

Java内存区域和内存分配

最近面试时经常会被问到JVM以及内存分配的问题,觉得有必要学习总结一下下~~~ 一.Java内存区域 Java中,虚拟机自动进行内存管理,在Java虚拟机执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,主要包含以下几个部分: 1.程序计数器: 当前线程所执行的字节码的行号指示器: 字节码解释器工作就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 线程私有:为了线程切换后能够恢复到正确的执行位置,每个线程需要有一个独立的程序计数器: JAVA方法,计数器记录正在执行

(转)Java 内存区域分配和垃圾回收(GC)机制

Java垃圾回收概况 Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代 码,对内存泄露和溢出的问题,也不需要像C程序员那样战战兢兢.这是因为在Java虚拟机中,存在自动内存管理和垃圾清扫机制.概括地说,该机制对 JVM(Java Virtual Machine)中的内存进行标记,并确定哪些内存需要回收,根据一定的回收策略,自动的回收内存,永不停息(Nerver Stop

jvm中堆栈以及内存区域分配

堆栈这个概念存在于数据结构中,也存在于jvm虚拟机中,在这两个环境中是截然不同的意思. 在数据结构中,堆栈是:堆 和栈两种数据结构,堆是完全二叉树,堆中各元素是有序的.在这个二叉树中所有的双亲节点和孩子节点存在着大小关系,如所有的双亲节点都大于孩子节点则 为大头堆,如果所有的双亲节点都小于其孩子节点说明这是一个小头堆,建堆的过程就是一个排序的过程,堆得查询效率也很高.栈是一种先进后出的线性表. 在jvm虚拟机中得堆栈对应内存的不同区域,和数据结构中所说的堆栈是两码事. 下面介绍jvm中得堆栈以及

2.java内存区域与内存溢出异常

2.1:概述 对于从事C.C++程序开发的开发人员来说,对象的新建内存区域和销毁内存区域(new和delete)都是由程序员手动调用的.java的内存管理是由虚拟机自动执行的.一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会成为一项异常艰难的工作. 2.2:.运行时的数据区域 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器.每条线程都需要有一个独立的程序计数器,各条线程之间计数

JVM学习与问题总结——java内存区域与内存溢出异常

java虚拟机将内存分为哪些区域? 根据Java SE7版本的Java虚拟机规范,虚拟机管理的内存包括5个运行时数据区域: 程序计数器 虚拟机栈 本地方法栈 方法区 堆 运行时数据区各部分的作用? 程序计数器 一个线程所执行的字节码的行号指示器. 字节码解释器会通过改变计数器的值来选取下一条将要执行的指令,那么分支.循环.跳转.异常处理.线程恢复都需要依赖计数器来完成.而Java虚拟机当中的多线程是通过争取CPU时间片来切换线程执行任务,当一个线程重新获取CPU时间片的时候就需要恢复上一次任务执

Java 内存区域与内存溢出异常

一.Java虚拟机内存划分 1.程序计数器 线程私有 可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时是通过改变这个计数器的值来选取下一条需要执行的字节码指令. Java虚拟机是通过多线程轮流切换并分配处理器执行时间的方式实现,为了切换线程后能正确的恢复到执行的位置,每一个线程都有一个独立的程序计数器. 2.Java虚拟机栈 线程私有,与线程的生命周期相同. 虚拟机栈描述的是Java方法执行的内存模型:每个方法创建的时候都要创建一个栈帧,用户存储局部变量表.操作数栈.动态链接.方