编程技术是改变世界的力量。
本站
当前位置:网站首页 > 后端语言 > 正文

C++ STL vector内存分配策略(c++中的内存分配)

gowuye 2024-04-29 16:10 14 浏览 0 评论

我们知道,在C++ STL中,vector是一种动态数组,它的内存分配机制是在需要时动态分配内存。当vector的元素数量超过当前分配的内存空间时,vector会自动重新分配更大的内存空间,并将原有的元素复制到新的内存空间中。

那么vector会按照什么样的策略选择新的内存空间大小呢?通过下面几行代码一探究竟:

#include <iostream>

#include <vector>

using namespace std;

int main()

{

std::vector<int> vecInt;

size_t capacity = vecInt.capacity();

unsigned int unCount = 0;

cout << "vector初始内存大小:" << capacity << endl;//打印vector初始内存大小

for (int i = 0; i < 100000; ++i)

{

vecInt.emplace_back(i);

if (capacity != vecInt.capacity())//如果重新分配内存,则打印新分配内存大小

{

++unCount;

capacity = vecInt.capacity();

cout << "vector第" << unCount << "次重新分配内存大小:" << capacity << endl;//打印vector重新分配内存大小

}

}

return 0;

}

运行结果截图:


通过运行结果我们不难看出,vector重新分配内存时,新的内存为原来内存的1.5倍,这种分配内存的策略既避免了频繁分配的开销,又减少了内存浪费,对我们的编程也是一种启示。

相关推荐

C# List 常用方法
C# List 常用方法

此例子会尽量将C#list中的常用方法给大家写一遍。准备一个设备类publicclassCEquipment{public...

2024-05-16 15:05 gowuye

高效检测Internet连接:C#中的简单方法与推荐实践

在C#中,检测Internet连接是否可用是一个常见的需求,特别是在开发网络应用时。这可以确保应用程序在尝试执行网络操作之前,用户已经连接到了Internet。本文将介绍几种在C#中检测Interne...

304.C# 设计模式:模板方法(Template Method)
304.C# 设计模式:模板方法(Template Method)

摘要模板方法模式是一种行为型设计模式,它定义了一个算法的骨架,将某些步骤的具体实现延迟到子类中。模板方法模式通过抽象类和具体类的组合来实现,抽象类定义了算法的骨...

2024-05-16 15:05 gowuye

C#常见技能_参数传递
C#常见技能_参数传递

大家好,我是华山自控编程朱老师前几天一个学员在学习C#与参数传递交互时,也不知道参数传递可以用来做什么。下面我们就详细讲讲C#和参数传递交互的相关知识。C#...

2024-05-16 15:04 gowuye

C#图解教程(第5版)
C#图解教程(第5版)

C#图解教程(第5版)作者:[美]丹尼尔·索利斯/[美]卡尔·施罗坦博尔出版社:人民邮电出版社译者:窦衍森/姚琪琳等出版年:2019-11...

2024-05-16 15:04 gowuye

C#-方法(2) 057
C#-方法(2) 057

方法分为静态方法与实例方法,现在学习的主要是静态方法;实例方法等学习类的时候再说,到时讲解它们有何区别使用方法的好处就是当程序中出现一些重复的代码时,可以把它写...

2024-05-16 15:04 gowuye

一个监控C#方法运行耗时开源库
一个监控C#方法运行耗时开源库

在项目开发中,我们经常需要监控某些方法的运行耗时,找出性能问题的所在地方。今天给大家,推荐一个用来统计C#方法运行耗时的开源库。01项目简介一个轻量级.Net库...

2024-05-16 15:04 gowuye

C#模拟键盘按键的三种方式实现
C#模拟键盘按键的三种方式实现

1.System.Windows.Forms.SendKeys使用SendKeys将键击和组合键击发送到活动应用程序。此类无法实例化。若要发送一个键击给某个...

2024-05-16 15:03 gowuye

网上看到的比较全面的c#帮助类,各种功能性代码,拿来即可用
网上看到的比较全面的c#帮助类,各种功能性代码,拿来即可用

今天给大家分享一个GitHub上比较全面的C#帮助类,项目GitHub地址:https://github.com/sgmcumt/Common.Utility...

2024-05-16 15:03 gowuye

C#中同步方法如何优雅调用异步方法

在C#中,同步方法优雅地调用异步方法通常涉及到异步编程的一些基本概念,如async和await关键字,以及任务(Task)类型。下面是一些常用的方法来同步地调用异步方法:使用async和await关键...

【2.C#基础】8.方法

8.方法8.1概述在编写程序时,一般会按照逻辑对处理进行分解,被分解的代码片段称为“方法”。C#中的函数(也可以称为方法)是一段具有签名(由函数名、参数类型和参数修饰符组成的函数信息)的代码块,...

C# 操作JSON的几种方式
C# 操作JSON的几种方式

关于Json数据在开发中的重要性,自然不言而喻;本篇通过两种在c#中常用的方式来实现对Json数据的序列化和反序列化,为了实现大多数的需求,我们采用稍微复杂一点...

2024-05-16 15:03 gowuye

C#自学——方法、可空类型
C#自学——方法、可空类型

方法方法的结构<访问修饰符><返回类型><方法名>(参数1,参数2,...){方法体}访问修饰符派生类...

2024-05-16 15:03 gowuye

精通c# -- 匿名方法与Lambda表达式

当用常规的委托调用方法时使代码很混乱或者不简洁的时候,可以使用匿名方法(内联代码块定义)。什么意思呢,我们用委托调用方法时,是根据方法名调用的,当需要待用的方法很多时,我们创建很多的方法,但是很多方法...

函数(7-7)匿名方法-C#编程零基础到入门学习
函数(7-7)匿名方法-C#编程零基础到入门学习

匿名方法顾名思义,匿名方法是没有名称的方法。可以使用委托(delegate)关键字定义C#中的匿名方法,可以使用lambda表达式来定义,并且可以将其分配给委托...

2024-05-16 15:02 gowuye

取消回复欢迎 发表评论: