C++存储方案和动态分配

目录
  • 存储方案和动态分配
    • 初始化

存储方案和动态分配

在之前的文章当中,我们讨论了C++用来为变量分配内存的5种方案,但是这些方案并不适用于使用new运算符分配的内存,这种内存被称为动态内存。

我们在之前的文章当中也曾介绍过,动态内存由newdelete控制,而不是由作用域和链接性规则控制。所以我们可以在一个函数当中分配动态内存,在另外一个函数中释放。

通常C++编译器当中有三块独立的内存,一块用于静态变量,一块用于自动变量,还有一块用于动态存储。

虽然存储方案的概念不适用于动态内存,但是适用于动态内存的自动和静态指针。C++ Primer当中有这么一个例子,我们在一个函数当中有如下语句:

float * p_fees = new float[20];

很明显,我们通过new创建了一个长度为20的float数组,这块数组的内存将会一直停留在内存当中,直到使用delete语句释放。但当该函数运行结束的时候,p_fees这个指针将会消失。如果希望在其他地方能够使用这个数组,需要将地址通过某种方式返回或者传递。

如果我们将p_fees的链接性声明为外部的,那么我们在其他地方都可以访问到了,如果另外的文件当中需要访问,也同样可以使用关键字extern

初始化

前面讲了使用new申请内存的方法,如果我们想要在分配内存的同时完成变量的初始化,应该怎么办呢?

如果要为内置的标量类型分配空间并初始化,可以在类型名后面加上初始值,并将它用括号括起来:

int *pi = new int(3);
double *pd = new double(99.9);

如果我们要初始化结构体或者是数组,则需要使用大括号的列表初始化,这需要编译器支持C++11,这是C++11中的新特性:

struct P {
    int x, y;
};

P *p = new P{3, 4};
int *arr = new int[4] {2, 3, 4, 5};

在C++11当中也支持对单值变量使用列表初始化:

double *pd = new double(99.99);

到此这篇关于C++存储方案和动态分配的文章就介绍到这了,更多相关C++存储方案和动态分配内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C与C++动态分配二维数组的实现方法

    C: C中使用函数malloc和free两个函数. //动态分配M*N维 int **a=(int **)malloc(sizeof(int*)*M); for(int i=0;i<M;i++) a[i]=(int *)malloc(sizeof(int)*N); //动态释放 for(int j=0;j<M;j++) free(a[i]); free[a]; C++: C++ 使用关键字new和delete. //动态分配M*N维 int **a=new int *[M]; for(int

  • 关于C++动态分配内存的介绍

    介绍 操作系统中存在一个内存管理器(Memory Manager),简称MM,它负责管理内存. MM提供的服务:应用程序可以向MM申请一块指定大小的内存(借出),用完之后应用程序应该释放(还回). 如: void* p = malloc(1024);//申请,从MMM借出内存 free(p); //释放,还回MM 1.MM管理的内存区域成为堆(Heap). 2.只要应用malloc,MM都会借出,如应用不归还,MM也不会主动要求你free.如果有个应用不停地malloc,而不free,最终会用光

  • 浅谈C++内存分配及变长数组的动态分配

    第一部分 C++内存分配 一.关于内存 1.内存分配方式 内存分配方式有三种: (1)从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在 例如全局变量,static变量. (2)在栈上创建.在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存 储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限. (3) 从堆上分配,亦称动态内存分配.程序在运行的时候用malloc或new申请任意多少的内存,程序员

  • 实例代码分析c++动态分配

    1. c语言中动态分配和释放 在c中,申请动态内存是使用malloc和free,这两个函数是c的标准库函数,分配内存使用的是系统调用,使用它们必须包含stdlib.h,才能编译通过. malloc后需要检查内存是否分配成功,free则要在指针不为空的情况下才能进行. 示例代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *p = (char*)malloc

  • C#访问C++动态分配的数组指针(实例讲解)

    项目中遇到C#调用C++算法库的情况,C++内部运算结果返回矩形坐标数组(事先长度未知且不可预计),下面方法适用于访问C++内部分配的任何结构体类型数组.当时想当然的用ref array[]传递参数,能计算能分配,但是在C#里只得到arr长度是1,无法访问后续数组Item. C++ 接口示例: void Call(int *count, Rect **arr) { //-.. //重新Malloc一段内存,指针复制给入参,外部调用前并不知道长度,另外提供接口Free内存 //-. } 结构体:

  • C++存储方案和动态分配

    目录 存储方案和动态分配 初始化 存储方案和动态分配 在之前的文章当中,我们讨论了C++用来为变量分配内存的5种方案,但是这些方案并不适用于使用new运算符分配的内存,这种内存被称为动态内存. 我们在之前的文章当中也曾介绍过,动态内存由new和delete控制,而不是由作用域和链接性规则控制.所以我们可以在一个函数当中分配动态内存,在另外一个函数中释放. 通常C++编译器当中有三块独立的内存,一块用于静态变量,一块用于自动变量,还有一块用于动态存储. 虽然存储方案的概念不适用于动态内存,但是适用

  • Sqlserver 高并发和大数据存储方案

    随着用户的日益递增,日活和峰值的暴涨,数据库处理性能面临着巨大的挑战.下面分享下对实际10万+峰值的平台的数据库优化方案.与大家一起讨论,互相学习提高! 案例:游戏平台. 1.解决高并发 当客户端连接数达到峰值的时候,服务端对连接的维护与处理这里暂时不做讨论.当多个写请求到数据库的时候,这时候需要对多张表进行插入,尤其一些表 达到每天千万+的存储,随着时间的积累,传统的同步写入数据的方式显然不可取,经过试验,通过异步插入的方式改善了许多,但与此同时,对读取数据的实时性也需要做一定的牺牲. 异步的

  • 小文件php+SQLite存储方案

    我们草根站长购买的虚拟主机往往都有文件数量限制,大量小文件占用大量资源,落伍精华区也有兄弟推荐豆瓣的解决方法,但是要有主机权限.只能另装思路,采用php+SQLite解决问题,经过我测试,切实可行,现在推荐给大家. 现在公开代码: 创建数据库文件:php1.php 复制代码 代码如下: $db = new SQLite3('mysqlitedb.db'); //获取文件2进制流 $filename = "http://www.jb51.net/logo.gif"; $handle =

  • C++内存模型和名称空间详解

    目录 1. 单独编译 2.存储持续性.作用域和链接性 2.1 作用域和链接 2.2 自动存储持续性 2.3 静态持续变量 2.4 静态持续性.外部链接性 2.5 静态持续性.内部链接性 2.6 静态存储持续性.无链接性 2.7 说明符和限定符 2.8 函数和链接性 2.9 语言链接性 2.10 存储方案和动态分配 3. 名称空间 3.1 传统的C++名称空间 3.2 新的名称空间特性 3.3 名称空间及其前途 4 .总结 本章内容包括: 单独编译 存储持续性.作用域和链接性 定位new运算符 名

  • AngularJS之ionic 框架下实现 Localstorage本地存储

    前言: 我们前台用的是ionic+AngularJS,做的是混合模式移动应用.最近有一个需求是,我在页面A上面滑动的时候,跳入页面B,页面B需要加载页面A的数据,这样的页面传值如何实现呢?那就需要用到LocalStorage本地存储了. Ionic Ionic是目前最有潜力的一款HTML5手机应用开发框架.通过SASS构架应用程序,他提供了很多UI控件来帮助开发者开发强大的应用.加上angularjs可以让ionic应用体验度增强.代码也非常简单.angularjs可以提供数据的双向绑定,使用它

  • Python使用shelve模块实现简单数据存储的方法

    本文实例讲述了Python使用shelve模块实现简单数据存储的方法.分享给大家供大家参考.具体分析如下: Python的shelve模块提供了一种简单的数据存储方案,以dict(字典)的形式来操作数据. #!/usr/bin/python import sys, shelve def store_person(db): """ Query user for data and store it in the shelf object """ pi

  • php实现Session存储到Redis

    对于大访问量的站点使用默认的Session 并不合适,我们可以将其存入数据库.或者使用Redis KEY-VALUE数据存储方案 首先新建一个session表 CREATE TABLE `sessions` ( `sid` char(40) NOT NULL, `updatetime` int(20) NOT NULL, `data` varchar(200) NOT NULL, UNIQUE KEY `sid` (`sid`) USING HASH ) ENGINE=MEMORY DEFAUL

  • Python Web框架Flask中使用百度云存储BCS实例

    对于部署在百度应用引擎BAE上的项目,使用百度云存储BCS(Baidu Cloud Storage)是不错的存储方案. 百度云存储已有Python SDK,对它进行简单封装后,就可以直接在Flask中使用了,项目代码见GitHub上Flask-BCS. 使用示例代码: 复制代码 代码如下: from flask import Flask from flask_bcs import BCS   BCS_HOST = 'BCS HOST' BCS_ACCESS_KEY = 'BCS Access K

  • Python Web框架Flask中使用新浪SAE云存储实例

    对于部署在新浪应用引擎SAE上的项目,使用新浪SAE云存储是不错的存储方案. 新浪SAE云存储仅能在SAE环境中正常使用,对它进行简单封装后,可以直接在Flask中使用,项目代码见GitHub上Flask-SaeStorage. 使用示例代码: 复制代码 代码如下: from flask import Flask from flask_saestorage import SaeStorage   SAE_ACCESS_KEY = 'SAE Access Key' SAE_SECRET_KEY =

  • HTML5 WebStorage(HTML5本地存储技术)

    WebStorage是HTML5中本地存储的解决方案之一,在HTML5的WebStorage概念引入之前除去IE User Data.Flash Cookie.Google Gears等看名字就不靠谱的解决方案,浏览器兼容的本地存储方案只有使用cookie.有同学可能会问,既然有了cookie本地存储,为什么还要引入WebStorage的概念? Cookie肿么了 cookie的缺陷是非常明显的 1. 数据大小:作为存储容器,cookie的大小限制在4KB左右这是非常坑爹的,尤其对于现在复杂的业

随机推荐