2 bat numb Bat_numb 于 2016.05.08 15:20 提问

初学者求教,c++中new如何分配数组内存

c++中使用new定义动态数组时,如果数组大小已知,那么会如何分配内存?是在程序运行时按照使用的元素数分配还是按照数组大小一次性分配(和普通数组一样的方式)

5个回答

QuantumEnergy
QuantumEnergy   2016.05.09 00:02
已采纳

也是一次性分配,你可以自己测试下,申请完,看它的大小

QuantumEnergy
QuantumEnergy 回复Bat_numb: 我写了一段测试代码(通过汇编和内存简单分析):http://blog.csdn.net/quantumenergy/article/details/51365425
大约 2 年之前 回复
Bat_numb
Bat_numb 怎么看呢…sizeof不是不能测动态数组吗
大约 2 年之前 回复
CSDNXIAON
CSDNXIAON   2016.05.08 15:32

C++ new内存分配
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

a179705090
a179705090   2016.05.08 17:24

运行时肯定已经知道数组的大小了,数组多大就分配多大的内存。

qq423399099
qq423399099   Ds   Rxr 2016.05.08 20:23

都可以的。
如果要分配的大小比较大的话,建议用new
new还需要你delete,是在堆分配空间 效率较低
而[]直接在栈上分配 会自动释放,效率高,但是栈空间有限

fsjyclb
fsjyclb   2016.05.08 22:08

看你怎么写,分配之前最好if...else判断下

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
指针数组、数组指针、二维数组动态分配内存
C 二维数组动态分配和释放 已知第二维 char (*a)[N];//指向数组的指针 a = (char ()[N])malloc(sizeof(char ) * m); printf(“%d\n”, sizeof(a));//4,指针 printf(“%d\n”, sizeof(a[0]));//N,一维数组 free(a); 已知第一维 char* a[M];//指针的数组 in
c语言数组变量在内存中的连续分配情况
今天在做题目的时候碰到一个很奇怪的现象。先看代码: #include #include int main() { char a[100]; int i,len; scanf("%s",a); len = strlen(a); printf("%d\n",len); a[100] = '0'; //请注意a[100] prin
C++ Code:动态分配数组内存的六种方法
问题:         如何快速给数组分配自定义长度的内存,方法有哪些?         本博客提供六种方法介绍,包含各种常用用法,且代码片亲自 编写-注解-编译-通过,对读者负责。 阐述:         提到动态分配C++的数组,我们想到的标签会有:malloc-free、new-delete、一维、二维...等等,本博客初创初心是各大公司企业都会青睐于在笔试或者面试中,要求应届生具备
数组内存分配之堆、栈
首先看一下数组: 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。 数组既可以存储基本数据类型,也可以存储引用数据类型。 数组的定义格式: 格式1:数据类型[]  数组名;int[] a:定义一个int类型的数组a变量。 格式2:数据类型  数组名[];int  a[]:定义一个int类型的a数组变量。 推荐使用第一种格式,第一种格式的可读性更强。
java数组的初始化与内存分配
java数组与java实例一样是引用数据类型。所谓引用数据类型,相似于c中的指针,就是给变量赋值的时候不是直接获得数据的值而是一种引用(即数据的地址)。例如   int[] t1=new int[]{1,2};   int[] t2=t1; 当有表达式t2[0]=000; t2[1]=1111; 时会有t1[0]=000; t1[1]=1111;。由此可见t1,t2同时指向了内存中的一块
指针数组&数组指针的分配内存及函数参数 C语言版
最近写代码总是被基础知识卡住,十分耽误时间,今天又卡住了。所以下定决心一定要弄清楚这个问题,然后不好的是网上的资料总是解决的并不清楚,总是在纠结什么是指针数组什么是数组指针,看了《C缺陷和陷阱》也没有我想要的东西。要么就是C和C++混为一谈,new int[5]这种语法C肯定是错误的,所以找个机会总结一下,然后希望以后不要再栽在基础上。定义指针数组:int p[10] 数组指针 int(*p)[5]
使用new分配内存、创建动态数组、
1、使用new来分配内存程序员需要告诉new,需要为哪种数据类型分配内存;new将找到一个长度正确的内存块,并返回该内存块的地址,程序员的责任是将改地址赋给一个指针。 int *pn = new int;new int告诉程序,需要存储int类型的内存,系统动态分配适合大小的内存,并将地址返回给pn,通过pn指针可操作内存中的值。注意,使用new分配的动态内存要用delete删除,对应格式: ...
C语言中内存分配
在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是有限的。因此在程序设计中,有效地管理内存资源是程序员首先考虑的问题。 第1节主要介绍内存管理基本概念,重点介绍C程序中内存的分配,以及C语言编译后的可执行程序的存储结构和运行结构,同时还介绍了堆空间和栈空间的用途及区别。 第2节主要介绍C语言中内存分配及释放函数、函数的功能,以及如何调用这些函数申请
new/delete多维数组/malloc分配动态二维数组
new用法:   1.开辟单变量地址空间   1)new int; //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋             值给整型指针a.   2)int *a = new int(5)作用同上,但是同时将整数赋值为5   2.开辟数组空间   一维: int *a = new
C++ 数组在内存中的分配
接前一篇的内容,C++中数组在内存中也有静态分配和动态分配的区别。静态数组建立的方式为:A a[],它在栈上分配空间;动态方式是使用new,malloc在堆上分配。 数组要么在静态存储区被创建(如全局数组),要么在栈或堆上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。看下例: 1 #include 2 using names