new分配内存栈堆静态区的区别

Myth丶恋晨 2022-07-16 09:10 322阅读 0赞
  1. <pre name="code" class="cpp">#include<iostream>
  2. #include<cstdlib>
  3. using namespace std;
  4. //char str[1024] = { 0 }; //内存静态区
  5. //静态区,栈区,堆区
  6. //int *p2 = new (str)int[10]{1,2,3,4,5,6,7,8,9,10}; 分配内存,以str地址为开始
  7. //堆区,可以覆盖重写 可以删除
  8. //栈区,静态区,可以覆盖重写,不可以删除
  9. void main()
  10. {
  11. //char str[1024] = { 0 };
  12. char *str = new char[1024]{0};
  13. int *p1 = new int[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  14. int *p2 = new (str) int[10]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  15. //从下面的打印的数据来看,p1 每次都是重新分配的地址,而p2每次使用的都是相同的地址。
  16. //这片地址被反复使用。new (str) int[10] 即每次都是使用以str为开始的这块地址。
  17. for (int i = 0; i < 10; i++)
  18. {
  19. cout << p1[i] << " " << p1+i << " " << p2[i] << " " << p2+i << endl;
  20. }
  21. cout << endl;
  22. free(str);
  23. for (int i = 0; i < 10; i++)
  24. {
  25. cout << p1[i] << " " << p1 + i << " " << p2[i] << " " << p2 + i << endl;
  26. }
  27. cout << endl;
  28. /*for (int i = 0; i < 10; i++)
  29. {
  30. cout << p1[i] << " " << p1 + i << " " << p2[i] << " " << p2 + i << endl;
  31. }
  32. cout << endl;
  33. for (int i = 0; i < 10; i++)
  34. {
  35. cout << p1[i] << " " << p1 + i << " " << p2[i] << " " << p2 + i << endl;
  36. }
  37. cout << endl;*/
  38. cin.get();
  39. }

发表评论

表情:
评论列表 (有 0 条评论,322人围观)

还没有评论,来说两句吧...

相关阅读

    相关 解释内存静态

    ①通常我们定义一个基本数据类型的变量,一个对象的引用,还有就是方法调用的现场保存都使用内存中的栈空间。 ②通过new关键字和构造器创建的对象都放在堆空间。 ③程序中的字面量

    相关 内存分配区别

    1.内存分配方式 内存分配方式有三种:        1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,st

    相关 浅析内存分配区别

    一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢?为了说明这个问题,我们先来看一下内

    相关 内存分配区别

      一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢?为了说明这个问题,我们先来看