利用编译器得知动态分配数组的大小

原创 2006年06月15日 17:10:00

每次在CSDN论坛C++板块闲逛,都会有很多收获,时常遇到一些精彩的回复。

    原帖地址http://community.csdn.net/Expert/topic/4822/4822941.xml?temp=.5199396中,摘录triace_zhang的回复如下:

    主要看编译器采用的策略。如果是vc6.0的话在动态分配的内存段前面16个字节会用一个cookie记录该内存段的大小,取这个cookie只要:

    int *p = new int[100];
    int i = *(int*)( (char*)p - 4 * sizeof( int ) );     //i就是内存段大小

    而有些其他编译器如dev c++采用映射map的形式,对于所有变量,用变量名为key,在map里对应每个变量名存贮变量大小。这种方法的话要找到映射map比较困难,暂时还没有什么好方法。

    另外:上述都是Project configurations设置为Debug的情况,如果为Release则无效。这个的原因,以我的水平就明白不了了。希望有高人能够解释一下。

版权声明:本文为博主原创文章,未经博主允许不得转载。

malloc函数动态分配数组长度

malloc函数动态分配内存
  • u013493841
  • u013493841
  • 2016年08月20日 11:39
  • 2016

动态分配的数组的初始化,sizeof长度

今天在写一个数据结构实验时, 动态分配了一个数组: bool *vis = new bool[N]; 然后初始化这个vis数组: memset(vis, 0, sizeof(vis)...
  • shuangde800
  • shuangde800
  • 2012年12月06日 18:33
  • 1638

Java 动态分配数组长度

int[] ary={1,1,1//...}; ary=Arrays.copyOf(ary,ary.length+1); ary[ary.length-1]=?//......你需要添加的值...
  • Shan_mei
  • Shan_mei
  • 2014年02月26日 17:42
  • 1829

c#动态改变数组大小

http://wenku.baidu.com/view/2f621ddad15abe23482f4de0.html
  • ktz666
  • ktz666
  • 2011年07月31日 16:11
  • 373

数组的静态分配和动态分配

相信许多C++的初学者像我一样搞不清楚为什么有时候使用数组的时候需要使用new语句,而有时候直接定义就好。上网找了找资料整理如下: 1、在使用数组前用new表达式动态分配数组空间,new表达式在堆中...
  • lkasdolka
  • lkasdolka
  • 2013年10月15日 15:35
  • 1816

如何动态分配二、三维数组

c和c++分别实现动态分配二、三维数组(转)来自:http://hi.baidu.com/jkxtu1984/blog/item/49e916234e557142ad34deaa.html2008-1...
  • allen_1986
  • allen_1986
  • 2011年04月27日 15:28
  • 2613

C++ Code:动态分配数组内存的六种方法

问题:         如何快速给数组分配自定义长度的内存,方法有哪些?         本博客提供六种方法介绍,包含各种常用用法,且代码片亲自 编写-注解-编译-通过,对读者负责。 阐述:     ...
  • Errors_In_Life
  • Errors_In_Life
  • 2017年12月25日 10:30
  • 299

指针数组、数组指针、二维数组动态分配内存

C 二维数组动态分配和释放 已知第二维 char (*a)[N];//指向数组的指针 a = (char ()[N])malloc(sizeof(char ) * m); printf(“%d\...
  • tianwei11
  • tianwei11
  • 2016年03月22日 22:59
  • 2878

c++动态分配二维/三维数组的内存

转自http://blog.csdn.net/boylinux/article/details/7783871 本文主要目的是用c和c++分别实现动态分配二、三维数组。一般而言,在C中用malloc...
  • a573233077
  • a573233077
  • 2016年01月13日 16:17
  • 1042

char * 动态分配大小

char* name;  name = (char*) malloc(sizeof(char) *1024 + 1);   //char *以\0结尾所以需要多+1 cin >> name;...
  • shandiantianying
  • shandiantianying
  • 2013年07月23日 11:12
  • 1851
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用编译器得知动态分配数组的大小
举报原因:
原因补充:

(最多只允许输入30个字)