当前位置: 首页> 娱乐> 影视 > 太原关键词优化报价_游戏推广平台怎么赚钱_百度怎么做网站_杭州seo泽成

太原关键词优化报价_游戏推广平台怎么赚钱_百度怎么做网站_杭州seo泽成

时间:2025/7/12 4:37:16来源:https://blog.csdn.net/lyk987654/article/details/144834530 浏览次数:0次
太原关键词优化报价_游戏推广平台怎么赚钱_百度怎么做网站_杭州seo泽成

1.new,delete操作符

C++中利用new操作符在堆区开辟数据
堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete.

语法: new 数据类型

利用new创建的数据,会返回该数据对应的类型的指针
new 用于分配堆空间的内存,相当于C语言中的malloc函数申请+关键字的构造函数(初始化)

例如:
char *ctr=new char(‘A’); //给ctr对象申请一个字节的空间并赋值为字符A
int *itr=new int(100);//给itr对象申请四个字节的空间并赋值为100


delete 用于销毁空间的内存,相当于C语言中的free函数释放+关键字的析构函数(销毁数据)

2.单个内存的申请和释放

操作格式:
数据类型 *指针对象名=new 数据类型(初始值);给对象申请空间并初始化
delete 指针对象名;                                            对象进行销毁处理
例如:
char *ctr=new char(‘A’);                                  //给ctr对象申请一个字节的空间并赋值为字符A
int *itr=new int(100);                                       //给itr对象申请四个字节的空间并赋值为100

销毁内存
delete ctr;

ctr=null;
delete itr;

itr=null;

示例1: 基本语法

int* func()
{
int* a = new int(10);
// 或
// int* a = new int;
// *a = 10;
return a;
}
int main() {
int *p = func();
cout << *p << endl;
cout << *p << endl;
//利用delete释放堆区数据
delete p;
//cout << *p << endl; //报错,释放的空间不可访问
p=NULL;
return 0;
}

示例2:开辟数组

连续内存的申请和释放
操作格式:
数据类型 *指针对象名=new 数据类型[申请长度];
delete []指针对象名;

例如:
char *str=new char[10];       //给str对象申请10个char类型的空间
int *ptr=new int[10];             //给ptr对象申请10个int类型的空间
销毁内存
delete []ptr;
delete []str;

//堆区开辟数组
int main() {
int* arr = new int[10];
for (int i = 0; i < 10; i++)
{arr[i] = i + 100;
}
for (int i = 0; i < 10; i++)
{cout << arr[i] << endl;
}
//释放数组 delete 后加 []
delete[] arr;
arr=NULL;
//arr=nullptr;
system("pause");
return 0;
}


3. new/delete与malloc/free的区别和联系


1. new操作符和malloc函数都是属于堆空间分配内存
2. malloc/free都是标准库函数,分配空间但不初始化数据,new/delete都是c++操作符,分配内存      并初始化数据.
3. malloc/free函数用于C语言程序设计,new/delete操作符用于c++程序设计
4. new/delete会调用系统中对内存的构造函数和析构函数进行初始化和销毁

        new先malloc再调构造函数,delete先调析构函数再free
5. new/delete的底层实现还是调用的malloc和free
6. malloc函数申请内存需要手动计算内存大小并且返回为void*,new可以自行计算所需大小对应类
型空间

4.内存碎片

动态分配内存频繁会产生内存碎片,主要有以下原因:

  1. 当程序频繁地使用 new 操作动态分配内存,并通过 delete 释放内存时,内存空间会被分割成许多不连续的小块。
  2. 每次分配的内存大小可能不同,而且释放的顺序也不一定与分配的顺序相同。这就导致内存空间中出现了一些小的、不连续的空闲区域。
  3. 这些空闲区域可能因为太小而无法满足后续较大规模的内存分配请求,尽管总体上可能仍有足够的空闲内存,但由于它们是分散和不连续的,无法被有效地利用,从而形成了内存碎片。
  4. 内存碎片的存在会降低内存的使用效率,可能导致系统性能下降,甚至在需要大量连续内存时出现内存不足的错误

常见的解决内存碎片方法:

  1. 内存池技术:预先分配一块较大的连续内存作为内存池,程序从内存池中分配和回收内存,减少外部的动态分配和释放操作,从而降低产生碎片的可能性。

        内存池技术是一种用于管理内存分配和释放的有效方法,旨在减少内存碎片的产生以及提高内存分配的效率。

具体来说,内存池的工作原理如下:

  • 首先,在程序初始化阶段,会一次性预先分配一块较大的连续内存区域,这就是所谓的内存池。这个内存池的大小通常是根据程序的预期内存使用情况进行估计和设定的。
  • 当程序需要分配内存时,不是直接向操作系统请求新的内存,而是从已经预先分配好的内存池中获取。内存池内部会维护一些管理机制,比如记录已分配和未分配的内存块状态、每个内存块的大小等信息。
  • 由于内存分配都在这个预先分配的内存池中进行,所以分配的内存块都是连续的,不会出现因为频繁的动态分配和释放导致的内存空间碎片化。
  • 而且,内存池中的内存分配和释放操作相对简单和快速,因为不需要与操作系统进行频繁的交互,节省了系统调用的开销。
  • 此外,内存池还可以根据具体的需求进行优化,例如可以根据常见的对象大小设置不同的内存块规格,以提高内存的利用率。
关键字:太原关键词优化报价_游戏推广平台怎么赚钱_百度怎么做网站_杭州seo泽成

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: