c语言用malloc申请完数组后,怎样再查看申请数组的大小

[复制链接]
查看11 | 回复5 | 2013-7-26 20:25:13 | 显示全部楼层 |阅读模式
C语言本身不提供查看动态分配的内存大小,因为分配内存是系统的API函数完成的。但是通过调用系统的API函数可以查看内存分配大小,不然肯定无法释放这些内存了。以windows为例:#includeusing namespace std;int main(){int *p=(int *)malloc(sizeof(int)*10);cout<<sizeof(p)<<endl;cout<<_msize(p)<<endl;system("PAUSE");return 0;}...
回复

使用道具 举报

千问 | 2013-7-26 20:25:13 | 显示全部楼层
没法看,分配内存是系统的API函数完成的,除非分配时记住了大小,否则你找不到记录大小的位置,虽然记录这个大小的数据一定存在。...
回复

使用道具 举报

千问 | 2013-7-26 20:25:13 | 显示全部楼层
1、一般是获取不到的,不过这个也得看编译器是如何实现的。VC++在每次分配的动态数组的起始地址之前记录动态数组的大小,这样就可以得到内存空间大小。2、例如:int *a=new int[12];cout<<"动态数组占用内存大小:"<<*(a-4)<<endl;
//为48cout<<"动态数组中元素个数:"<<*(a-...
回复

使用道具 举报

千问 | 2013-7-26 20:25:13 | 显示全部楼层
只能根据调用malloc时候的参数……...
回复

使用道具 举报

千问 | 2013-7-26 20:25:13 | 显示全部楼层
这个涉及两个存储区域,堆和栈,你用malloc申请的空间在堆上,chara[10]这个是在栈上。堆和栈最重要一个区别是,栈是系统管理的的,他负责回收和释放,所以有个概念叫作用域,变量的作用域一结束,栈就回收变量的资源。但是堆是程序员管理的,你不释放,除非进程结束,这个空间就一直在那,就有了一定灵活性。回答了申请堆的作用。堆在实现的时候...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行