1.如何一次在堆上申请4G的内存?

因为32位的环境下虚拟地址空间的大小只有4g,而光内核空间就需要1g,所以不可能申请得到,只有在64位的环境下才可以实现,只需要把执行环境改为64x即可

#include <iostream>
using namespace std;
int main()
{void* p = new char[0xfffffffful];cout << "new:" << p << endl;return 0;
}

2.设计一个类,该类只能在堆上创建对象

  • 将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。
  • 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建

在堆和栈上创建对象都会调用构造函数,为了防止在栈上创建对象我们将构造函数私有化。拷贝构造函数是在栈上创建对象。

class HeapOnly
{public:static HeapOnly* Create(){return new HeapOnly;}
private:HeapOnly() {}HeapOnly(const HeapOnly&);//C++11形式HeapOnly(const HeapOnly&) = delete;
};

3.设计一个类,该类只能在栈上创建对象

  • 只能在栈上创建对象,即不能在堆上创建,因此只要将new的功能屏蔽掉即可,即屏蔽掉operator new和定位new表达式,注意:屏蔽了operator new,实际也将定位new屏蔽掉。

new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。

operator new函数实际通过malloc来申请空间,当malloc申请空间成功时直接返回;申请空间失败,尝试 执行空间不足应对措施,如果改应对措施用户设置了,则继续申请,否则抛异常。

operator delete函数最终是通过free来释放空间的

class StackOnly
{public:StackOnly()  {};
private:void* operator new(size_t size);void operator delete(void* p);
};

C++ 如何一次在堆上申请4G的内存?如何设计一个类只能在堆或者栈上创建对象?相关推荐

  1. 请你设计一个用于填充n阶方阵的上三角区域的程序。

    给大家分享一个老夫刚刚弄懂的代码,说实话,博主对这个填充N阶方阵的程序真心是不擅长啊,这个程序是从网上搞来的,废话不说了,直接上题:方阵的主对角线之上称为"上三角".请你设计一个用 ...

  2. 设计一个jsp页面,要求在网页上显示当前日期和时间,如果时间在6:00~12:00,输出“上午好”:如果时间在12:00 18:00, 输出“下午好”:

    设计一个jsp页面,要求在网页上显示当前日期和时间,如果时间在6:00~12:00,输出"上午好":如果时间在12:00 18:00, 输出"下午好":如果时间 ...

  3. 设计一个用于填充n阶方阵的上三角区域的程序。填充规则是:使用1,2,3...的自然数列,从左上角开始, 按照顺时针方向螺旋填充

    题目7:方阵的主对角线之上称为"上三角". 请你设计一个用于填充n阶方阵的上三角区域的程序.填充规则是:使用1,2,3-的自然数列,从左上角开始, 按照顺时针方向螺旋填充. 例如: ...

  4. 控制C++的类只能在堆分配或只能在栈分配

    //HeapOnly.cpp #include   <iostream>     using   namespace   std; 只能在堆上分配空间:我们可将类的析构函数用private ...

  5. 只在堆上或只在栈上定义对象

    转自:http://blog.csdn.net/g5dsk/article/details/4775144 代码: [cpp] view plaincopyprint? class OnlyHeapC ...

  6. C++ 特殊类设计:只能在堆、栈上创建的类、无法继承的类、无法拷贝的类、只能创建一个对象的类

    文章目录 请设计一个类,不能被拷贝 请设计一个类,不能被继承 请设计一个类,只能在堆上创建对象 请设计一个类,只能在栈上创建对象 请设计一个类,只能创建一个对象 饿汉模式 懒汉模式 请设计一个类,不能 ...

  7. [转载]如何限制一个类对象只在栈(堆)上分配空间?

    一般情况下,编写一个类,是可以在栈或者堆分配空间.但有些时候,你想编写一个只能在栈或者只能在堆上面分配空间的类.这能不能实现呢?仔细想想,其实也是可以滴. 在C++中,类的对象建立分为两种,一种是静态 ...

  8. JVM 的栈上分配、TLAB、PLAB 有啥区别?

    我们在学习 G1 回收器的时候,一般我们都会接触到 TLAB 和 PLAB 这两个术语.它们都是为了提高内存分配效率而存在的,但它们和栈上分配有什么区别呢?今天,就让树哥带着大家盘一盘. 栈上分配 稍 ...

  9. c语言malloc引用类型作参数,c语言中动态内存分配malloc只在堆中分配一片内存.doc...

    c语言中动态内存分配malloc只在堆中分配一片内存 .C语言中动态内存分配(malloc)只在堆中分配一片内存,返回一个void指针(分配失败则返回0),并没有创建一个对象.使用时需要强制转换成恰当 ...

最新文章

  1. 文科生也会搭的微信个人号后台
  2. 深度学习很难?一文读懂深度学习!
  3. python 父类构造函数,python 对于子类构造函数重写父类构造函数的了解
  4. spring bean 基于xml的4中初始化方法
  5. ASP.NET MVC 使用Log4Net记录系统运行中问题
  6. 中南民族大学java考试_中南民族大学Java语言程序设计期末试卷A卷
  7. php curl 下载图片 花,PHP curl下载图片的方法
  8. 解决python访问中突发requests.exceptions.ConnectionError:Max retries exceeded with url报错
  9. python中自定义错误_Python中的自定义错误消息
  10. 计算机办公应用总结,2017年办公自动化实习报告总结
  11. Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文
  12. 南昌大学c语言第八章函数答案,南昌大学计算机C语言答案8
  13. 把echarts导出成pdf
  14. 把一个base64编码的图片绘制到canvas (canvas的图片在转成dataurl)
  15. 光学设计软件ZEMAX的安装与基本操作
  16. SPSS Modeler 神经网络实践案例(第十四章)
  17. Win10此设备不支持接收 Miracast 无法投影的解决方法
  18. 【网站】比较知名的大型公司官网清单可以收藏关注一下,欢迎您来补充
  19. 使用vim编辑器配置网络
  20. labelmx条码打印软件如何批量制作服装吊牌

热门文章

  1. SpringCloud_Sell.sql
  2. 加密与安全 - Java加密与安全
  3. Zookeeper的典型应用场景(2)
  4. mysql使用常量列_MySQL 执行计划
  5. linux ../的含义
  6. C#中所有对象共同的基类是System.Object
  7. springMVC---处理模型数据方法 *
  8. Puppet exec资源介绍(二十六)
  9. Node.js与Sails~Model数据模型
  10. 使用GoldenGate进行平台迁移和数据库升级(9i-11g)步骤描述