设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: a554187203
打印 上一主题 下一主题

[讨论] 悟了,悟了,终于明白变量这玩意到底是啥了

[复制链接]

Lv3.寻梦者

孤独守望

梦石
0
星屑
3121
在线时间
1534 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

11
发表于 2014-5-19 19:06:39 | 只看该作者
本帖最后由 IamI 于 2014-5-19 19:08 编辑

Value class & Ref class.
Ruby 这方面不清楚,为了避免被嘲笑,用托管C++(C++.Net)举例子。

Value Class,比如int(Fixnum), char, float,占用固定长度的字节,宣言的变量对应内存位置上仅有目标数值。
Value Class 在传值时,与源失去联系。
Value Class 可以被取成指针来达成别名,现代语言一般会提供一个指针封装,比如NSNumber与NSInteger,当然Ruby只有Fixnum。
Value Class 一般长度不是很长。
你可以用关键字struct来宣言一个Value Class。
仅在托管C++中,你可以用关键字value class 来宣言一个Value Class。
离开有效域,对象灭失。

Ref Class, 比如String,宣言的变量内存对应位置是一个指针(有GC的语言严格来说是句柄,或者可变指针),长度可以固定也可以变长,指向堆栈中的实际值。
现代语言中,一般不允许宣言Ref Class 的实体。Ruby 中除了Fixnum,Float,Bignum(存疑,我忘了……)以及RGSS的Rect,Color,Font(存疑)以外都是Ref Class。
这个类在传值时,依然是原来指向的对象,因为是指针传值。
这种类一般会提供一个Clone方法来获得一个Copy。
Ref Class 可以令人发指的长。
你可以用关键字class来宣言一个Ref Class。
仅在托管C++中,你可以用关键字ref class 来宣言一个Ref Class
不再有指针指向时,有GC的语言会析构对应实体。
Ruby 中只允许用class关键字宣言ref class。Struct是一个抽象类而不是关键字。
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
44 小时
注册时间
2014-12-23
帖子
31
12
发表于 2015-1-30 09:32:06 | 只看该作者
本帖最后由 y1072864217 于 2015-1-30 09:34 编辑

那个地址是存储在内存中的,当我们定义一个变量那个变量会与内存中的某个地址关联,然后我们进行赋值后那个值会存储到那个地址中。当程序运行结束这个程序所有的空间会被释放调允许被其他程序所使用。而变量的值是以二进制存储的,也就是以0或1存储的,1个0或1个1表示一位,8位是一个字节,1024字节是1k,1024k是1m然后网上推。楼主说的那个123最终存储到内存中是1111011也就是占7位的内存。

点评

所以,Fixnum 本身不占内存。占内存的是变量到 object_id 的引用  发表于 2015-1-30 10:39
整数是直接通过 object_id 本身进行传递的。Ruby 的 C 实现中用宏 FIX2LONG 获取 object_id 对应的整数  发表于 2015-1-30 10:38
在C语言中整形数据占的内存好像是编译器定的不是机器定的。  发表于 2015-1-30 10:01
应该没有,因此不太清楚它封装之前是什么样的。  发表于 2015-1-30 10:00
RUBY中好像没有声明整形数据类型,只声明了有整数和浮点数。  发表于 2015-1-30 09:58
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-10 10:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表