读书人

关于c++ new内置类型对象的储存位置

发布时间: 2013-08-24 13:17:55 作者: rapoo

关于c++ new内置类型对象的存储位置
1:一个结构体
struct student
{
int num;
int age;
};

struct student * stu=new Student;

这个stu指针所指向的内存地址是对内存呢还是栈内存呢?

c++中对待struct类型是内置类型还是自定义类型啊?

2:int *p =new int(100);
这个p所指向的内存地址是堆内存还是占内存呢?也就是说内置类型new出来的对象是在堆中存储还是栈中存储呢?
这个怎么用实验代码验证呢?

3:数据结构中的堆与我们c++程序中new对象的所使用的堆有什么不同啊?只是概念不同吗?
请高手给予指点,万分感激关于c++ new内置类型对象的储存位置 c++ 存储 堆栈 内置类型 new
[解决办法]
new 出来的都是堆内存了。struct 结构体肯定是自定义的数据类型吧。
[解决办法]


1 堆空间
struct 关键字就是让我们可以自定义类型的(当然是通过内部类型)

2 堆空间
不只是内置类型,只要是new出来的,即使自己定义的类型也都是在堆空间的
堆的内存地址是有个范围的,网上查下,然后你可以打印你new出来空间,一定也是在这个地址范围内的!

3 完全不同的概念!
数据结构中的堆是一种排序的树形数据结构的,c++的堆空间是指一片内存空间
只是c++堆区是采用了数据结构中堆的数据结构管理方式

[解决办法]
C++标准里面没有堆,也没有栈。对于语言来说,对象有两种生命期,由编译器自动决定生命期的,和不由编译器自动决定生命期的。堆和栈只不过是比较流行的内存管理的实现算法而已。只要你愿意写,new的存储地点可以是堆,可以是栈上的数组内,也可以是硬盘。

VC里面,默认的全局的new函数是调用CRT堆,这个堆如果需要内存,是调用Windows的堆API。
[解决办法]
1.内存管理中的堆和数据结构中的堆不是一回事。
2.内存管理中的栈和数据结构中的栈是同一种结构(LIFO)。
3.使用new/mallc等都是在堆上开辟空间。

读书人网 >C++

热点推荐