- C++内存分配方式
一个进程被分配的虚拟内存空间包含以下几个区域(从低地址向高地址):文字常量区、代码区、全局区(.data/.bss)、堆区、共享库存储器映射区、栈区、用户栈(存储命令行参数和环境变量)。
对于这几个区存储的什么内容前面博客有介绍。虚拟内存空间一般是从0x0000 0000-0xffff ffff,大于共4G,前3G是用户空间,后1G是内核空间。
栈的大小可以设置,在类UNIX平台上,可以在环境变量中设置栈的大小,在Windows平台下,栈的大小在可执行文件当中,一般情况下,不同平台栈空间默认大小如下:SunOS/Solaris 8172K bytes (Shared Version),约8M
Linux 10240K bytes,约10M
Windows 1024K bytes (Release Version),约1M
AIX 65536K bytes,是2^16,约128M
堆大小是可以自己申请的,只要不超过内存都是可以的,最大多少不知道,怎么着都不会超过4G吧。
malloc/free作用于堆上,new/delete作用于自由存储区。但是由于new是c语言中malloc的简单包装,所以调用系统的new操作符分配的空间其实还是在堆上,所以new操作符分配的对象说它在堆上也合适,说它在自由存储区也合适。但是如果重载new操作符,改用在其他地方分配内存,那么自由存储区的位置就发生了变化,比如可以在全局区。 - C++常用内存分配函数
有new()/delete()、new[]/delete[]、malloc/free,calloc,
C++内存管理技术内幕
最新推荐文章于 2024-09-22 00:00:00 发布
本文探讨了C++内存管理的各个方面,包括内存区域、栈与堆的特性、常用的内存分配函数如new/delete、malloc/free等。还提到了内存分配错误处理、智能指针、内存泄漏检测及解决方案、内存回收以及C++中的内存对象和垃圾回收方法。着重指出new/delete相比于malloc/free的优势在于能够处理对象的构造和析构。
摘要由CSDN通过智能技术生成