当delete某个元素的时候,我们可以想,根据数据的类型,就能够判断需要释放的内存的大小。不过当delete是一个数组的时候,语法是 delete [] p; 并不需要提供数组的元组个数。那么编译器是如何得知这个信息的呢?
上网上搜了一圈,总结成一句话:肯定存在某个地方了,这个地方对程序员是透明的,而且每个编译器的实现不一样。有些帖子说,这个信息存放在被分配内存的“紧前面”,我写了下面的程序,在win7 + vs2008下面测试:
void VerifyMemorySize (void)
{
char *p = new char[128];
cout << (int)(*(p-4)) << endl;// the expected value is 128
delete [] p;
}
发现打印出来的数值似乎是随机的。所以以上说法不成立。后来又看到vs里面有个函数_msize可以获得指针指向内存的大小,函数原型如下:
size_t _msize(void *memblock);
写了一下代码,想debug进去看看。
void VerifyMemorySize (void)
{
char *p = new char[128];
int i = _msize(p);// 断点
cout << i<< endl;// the expected value is 128, yes it is!
delete [] p;
}
debug进入到这个函数
retval = (size_t)HeapSize(_crtheap, 0, pblock);
就没有源代码了。把_msize换成_msize_dbg也一样,没有源代码。
总结一下:
1. 编译器怎么知道指针指向存储空间的大小的,是它自己的事,它也不希望程序员知道,大家就别操心了。
2. 如果有个指针你不知道它只想对大内存,调用_msize,头文件是<malloc.h>。
分享到:
相关推荐
压缩 从输入数组生成数组元组。安装$ npm install compute-zip 要在浏览器中使用,请使用 。用法 var zip = require ( 'compute-zip' ) ;zip( arr1, arr2,...[, opts] ) 返回一个array的arrays ,其中,所述返回的第...
Python Python基本。 通过使用数组元组。 它具有有关如何将输入中的新项目追加到元组和数组的详细信息。 另外,如何搜索字符串中的大写字母。
Python元组是一个不可改变的数组,里面的每个元素虽然不能被改变进行替换的操作。但是可以通过方法查询元组中元素的个数,资源中就介绍了如何计算元组个数的相关方法。
这篇帖子主要讲讲几个月前看的一本书,《流畅的Python》真本书是由一位奋战在Python开发一线的大牛写的,书中有讲了多关于Python的神奇特性,对你写一段地道的Pythonic非常有帮助. 元组不可修改or可修改 结合曾经的...
备注一下:这种构建对象数组的方法其实并不是我们 ts 中构建对象数组的好方法,我们之后会介绍 ts 中别名和接口的概念,使用这两个概念我们可以轻松方便的构建符合
面试中特别重视对于数据结构的考查(某次面试被问及Python中列表和数组的区别,回答的不好,痛定思痛,扎实的基础决定面试的成败!) 本节简要总结Python中数组、列表、元组、Numpy数组、Numpy矩阵的概念与联系。 1....
这里的 A.shape 的结果是个元组。这是因为一维数组的情况下也要返回和多维数组的情况下一致的结果。例如:二维数组时返回的元组(4,3),三维数组返回的元组(4,3,2),因此一维数组时也同样以元组的形式返回结果。...
python数组,包含列表、元组、字典、集合,本代码分别介绍了这四种数组的创建方式和输出结果
基础篇11-python基本数据结构-元组和集合,元组和集合的基本用法
了解几个简单的构造函数,如何修改元组,访问元组,遍历元组,了解元组的内置函数,len(),计算元组个数,元组的最大、最小值,tuple()将列表转化成元组
什么是元组?如何创建元组,如何访问元组?元组能不能修改?元组的遍历,常见的元组遍历函数包括,len(tuple)、max(tuple)、mix(tuple)、tuple(seq)
解(即嵌套的元组数组)。 安装 $ npm install compute-unzip 要在浏览器中使用,请使用 。 用法 var unzip = require ( 'compute-unzip' ) ; 解压缩( arr[, idx] ) 解压一个(即,嵌套array元组)。 var ...
元组和列表操作类似,但是元组属于不可变序列,元组创建后只可以元素覆盖不可以修改元素。元组的定义方式和列表相同,但定义时所有元素是放在一对圆括号“( )”中,用逗号“,”分隔元素值。 元组 实例:体会元组中的...
这段代码本来是一道比较经典的算法题,有很多种方法可以解决,比如直接对所有数组加起来做全排列,或者每个数组选一个数做,哪怕直接调用Python的函数直接算笛卡尔积都可以,网上有很多类似的资源。但是这些方法存在...
Hash表采用了数组加链表的结构,即一个数组元组中不再是存储单个元素,而是存储一个链表,就好比包租婆收租的时候,一个握把上面挂了一连串的钥匙一样。Hash表的引出是为了减少查询数据库操作所带来的时间问题,将...
在foreach语句中使用枚举,可以迭代数组或集合中的元素,且无须知道集合中的元素的个数。如图显示了调用foreach方法的客户端和集合之间的关系。数组或集合实现带GetEnumerator()方法的IEnumerable接口。...
C# 7.0已经出来一段时间了,大家都知道新特性里面有个对元组的优化:ValueTuple。这里利用详尽的例子详解Tuple VS ValueTuple(元组类VS值元组),10分钟让你更了解ValueTuple的好处和用法。 如果您对Tuple足够了解...
python数组四种表达方式,包含列表、元组、字典、集合 代码展示了列表、元组、字典、集合等四种对应的创建方式
【免费题库】华为OD机试 - 勾股数元组(Java & JS & Python & C & C++).html