鱼C论坛

 找回密码
 立即注册
查看: 1803|回复: 6

[已解决]自由存储区到底是malloc还是new申请的区域?

[复制链接]
发表于 2018-10-24 10:37:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wwhywhy 于 2018-10-30 08:40 编辑

我看小甲鱼的《小甲鱼C++视频教程》第22集中,介绍的是malloc申请的区域为自由存储区。
但是我在网上调查的结果却是new/delete使用的区域是自由存储区。
理由是:new是C++的关键字,它的实现是使用了malloc的方法扩展而成。
另外new使用的区域并不一定是在堆里。堆里的区域是malloc使用的。

到底哪个说法正确?谁能帮忙解释下?
最佳答案
2018-10-25 12:33:23
因为new也可以使用栈空间
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <new>

  4. int main()
  5. {
  6.         unsigned char buffer[1024];
  7.         int *p = new (buffer)int[10];
  8.         std::cout << (void *)buffer << std::endl;
  9.         std::cout << (void *)p << std::endl;

  10.         for(int i = 0; i < 10; ++i)
  11.                 p[i] = i;
  12.         for(int i = 0; i < sizeof(int) * 10; ++i)
  13.                 printf("%.2X ", buffer[i]);
  14.         std::cout << std::endl;
  15.         return 0;
  16. }
复制代码
  1. 00CFF434
  2. 00CFF434
  3. 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00
  4. 请按任意键继续. . .
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-25 10:30:55 | 显示全部楼层
自己顶一下吧。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-25 12:33:23 | 显示全部楼层    本楼为最佳答案   
因为new也可以使用栈空间
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <new>

  4. int main()
  5. {
  6.         unsigned char buffer[1024];
  7.         int *p = new (buffer)int[10];
  8.         std::cout << (void *)buffer << std::endl;
  9.         std::cout << (void *)p << std::endl;

  10.         for(int i = 0; i < 10; ++i)
  11.                 p[i] = i;
  12.         for(int i = 0; i < sizeof(int) * 10; ++i)
  13.                 printf("%.2X ", buffer[i]);
  14.         std::cout << std::endl;
  15.         return 0;
  16. }
复制代码
  1. 00CFF434
  2. 00CFF434
  3. 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00
  4. 请按任意键继续. . .
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-10-26 08:34:59 | 显示全部楼层
人造人 发表于 2018-10-25 12:33
因为new也可以使用栈空间

我认同你的说法。
就是因为new使用的区域可以调整。而不是malloc一样,只能在堆区。
好像小甲鱼老师的说法值得商榷了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-29 21:29:02 | 显示全部楼层
人造人 发表于 2018-10-25 12:33
因为new也可以使用栈空间

我本来想把回帖设置成最佳答案,但是我不小心做了个回复,然后这个最佳答案的图标,我就找不到了。我该怎么设置?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-30 00:02:23 | 显示全部楼层
wwhywhy 发表于 2018-10-29 21:29
我本来想把回帖设置成最佳答案,但是我不小心做了个回复,然后这个最佳答案的图标,我就找不到了。我该怎 ...

没事,没有就没有了
^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-30 08:42:14 | 显示全部楼层
人造人 发表于 2018-10-25 12:33
因为new也可以使用栈空间

明白了。只有问题求助才能设置为最佳答案。我之前曾经将这个主题重新设置为讨论问题了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 05:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表