返回信息流>> C=cell(3,4);
>> C{2,3}=rand(2);
>> whos
它的运行结果是:
Name Size Bytes Class
C 3x4 136 cell array
请问为什么是136 Bytes?
这是一条镜像帖。来源:北邮人论坛 / matlab / #4679同步于 2009/2/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
弱弱的问一道有关matlab的问题
fengxinzi
2009/2/15镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
猜测一下:
"C = cell(3, 4)", 系统暂时无法知道 cell 中具体的元素是什么,只能先分配一个大概的空间。比如就是136 byte。
"C{2,3}=rand(2)", 发现 136 byte 还是够用的,就不用增加了。
"whos", 就显示最先分配的空间大小
【 在 fengxinzi 的大作中提到: 】
: >> C=cell(3,4);
: >> C{2,3}=rand(2);
: >> whos
: ...................
哦
C = cell(3, 4)之后分配的空间不是136,而是48
也就是每个元胞分配4个字节
当C{2,3}=rand(2)时
136的组成成分是:剩下的11个元胞的44个字节的基本信息+32字节的2*2数组+60字节的不知道什么东东。。。。
难道说明一下这地方有个数组竟然用了60字节??
一个元胞一旦被分配过具体的内容,就要用60字节来说明这个元胞,即使将刚才输入的值删去,这60字节也不会收回。。。。
刚才发现matlab里面的字符都是unicode编码
英文字母都占俩字节。。。
【 在 iamsai 的大作中提到: 】
: 猜测一下:
: "C = cell(3, 4)", 系统暂时无法知道 cell 中具体的元素是什么,只能先分配一个大概的空间。比如就是136 byte。
: "C{2,3}=rand(2)", 发现 136 byte 还是够用的,就不用增加了。
: ...................
经过实验,原因可能是这样:
在C=cell(3,4)时,matlab为每个元胞分配4个字节,且初始化为空
一旦对其中一个赋值之后,matlab向系统申请60个字节来表示这个元胞,然后再加上里面的值所占的空间,即一个double数值占用8字节内存,rand(2)就占用4*8=32个字节,因此上面的现象就是48 + 60 - 4 + 32 = 136吧~
喔,刚才没看到版主说过了,就是版主说的那样,用其他的rand(1,2)等也可验证这个
【 在 fengxinzi 的大作中提到: 】
: >> C=cell(3,4);
: >> C{2,3}=rand(2);
: >> whos
: ...................