怎样得知一块内存里面有多少个字节是已经有数据的啊?

xgy_p 2004-03-23 02:25:03
哪位可以帮我写写这个函数,我想知道一块内存空间里有多少字节是已经写入了的。代码如下,谁帮我填填这个memSize函数,应该输出12吧

int memSize(const void *ptr)
{
//???
}

int main()
{
void *ptr = malloc(1024);
void *p = ptr;
bzero(ptr,1024);
int i = 1234;
double a = 123.45;
memcpy(p,&i,sizeof(int));
p += sizeof(int);
memcpy(p,&a,sizeof(double));
printf("bytes:%d\n", memSize(ptr));
}
...全文
86 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
jurkey 2004-03-25
  • 打赏
  • 举报
回复
这么做有意义吗?
双杯献酒 2004-03-25
  • 打赏
  • 举报
回复
(1)没有上电,所有内存都没有信息
(2)上电后,所有内存都有信息.(其中有些是垃圾信息).
msxiaoguo 2004-03-25
  • 打赏
  • 举报
回复
这个问题是可以解决的
你是已经输入两个数直,只要检查所分配的内存中,按顺序是否是这两个数,当然可能输出的数是其他类型的数值表示法,当你把前几位的数可以转化为你所输入的值,此时:你所记数的值就是已经占用的内存
所开辟的内存由于是用malloc()动态分配的,如果这块内存有其他的数值,它是无效的
//////////////////////////////////////////////////////////////////////////
但是,这个函数有什么用呢?你自己完成吧!
////////////////////////////////////////
请高手指点!
herryhuang 2004-03-25
  • 打赏
  • 举报
回复
楼上的,人家问“使用了”多少空间,看清问题
psbeond 2004-03-25
  • 打赏
  • 举报
回复
维护一个计数器,可以改变内存值的时候加上改变的数量,返回这个值就行,
另外你那个memSize是什么意思,怎么能是内存大小呢?名字起的不对,重起
liao2001 2004-03-25
  • 打赏
  • 举报
回复
谁说不可以呀,明明可以嘛

return sizeof(int)+sizeof(double);

哈哈,是脑筋急转弯?
golgol 2004-03-25
  • 打赏
  • 举报
回复
我的办法可能比较笨啊:见笑了!
1,你可以自己记录申请空间的起始偏移
2,你可以自己定结束符,进行判断
Jiaft3000 2004-03-25
  • 打赏
  • 举报
回复
有办法:你的自己做内存配置管理的簿记工作,就象GC中做的一样;如果对于单独的一块内存区域,可以设置一个guard flag, 超出了这个标志就是没有数据的区域。have a try?
lufeiyuan 2004-03-25
  • 打赏
  • 举报
回复
无法
herryhuang 2004-03-25
  • 打赏
  • 举报
回复
不可能的,你自己的程序,你用了多少,自己可以管理的
SCUM 2004-03-25
  • 打赏
  • 举报
回复




绝对不可能


dengsf 2004-03-25
  • 打赏
  • 举报
回复
基本不可能~~因为程序在没有其它额外信息的前提下,根本不知道那些数据是表示有效的。
除非有特殊格式,比如字符串的最后一个是'\0';或是由其它信息记录着使用情况,这样才有可能表示出。

还有就是用 memcpy 的时候,不是由自己来指定要复制多少个字节的吗?自己记录这些信息就行了。

另:
============================================================
Polarislee(北极星) ( ) 信誉:105 2004-03-23 15:18:00 得分:0
谁说java和.net的垃圾回收是通过引用技术,好好看看在说话行不行
============================================================
我好象听说java大概是通过记录着堆内某个对象所占用的内存是的引用数来判断该内存是否仍然有效的。
那实际上大概是怎么处理的?

学习~~

cnxiaohai 2004-03-25
  • 打赏
  • 举报
回复
你可以试试汇编
cnxiaohai 2004-03-25
  • 打赏
  • 举报
回复
好像很难

这个属于特权指令

只有操作系统能用啦~~~~~~~~~~~~~~~~~~~~~~~
北极猩猩 2004-03-23
  • 打赏
  • 举报
回复
谁说java和.net的垃圾回收是通过引用技术,好好看看在说话行不行
mvmouse 2004-03-23
  • 打赏
  • 举报
回复
这个函数有什么用吗?怎么判断内存中的数据是否是被写入的还是随机产生的?不可能吧,像java和.net的垃圾回收都是通过引用计数来实现的,如果你说的这个函数能写出来,垃圾回收也太容易了吧,为什么Mircosoft和Sun都不用呢?
junnyfeng 2004-03-23
  • 打赏
  • 举报
回复
呵呵,你能够把以上程序(除memsize()和那个bzero(ptr,1024)外)可以编译通过的话

我可以帮你写memsize(),如果编译不过,恐怕很难有人能帮上忙
oo 2004-03-23
  • 打赏
  • 举报
回复
no way

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧