Tag: 内部表示

Javainheritance的大小成本是多less?

在interwebs上有各种各样的文章,试图在实践中估计特定JVM实现中java.lang.Object的开销。 例如,我已经看到在一些JVM中, 估计为8字节的裸Object的大小开销。 我想知道的是, extends关系的典型JVM实现是否在类层次结构的每个级别引入了增量大小开销。 换句话说,假设你有一个具有N级子类的类层次结构。 O(1)或O(N)类的内存表示的开销是多less? 我想这是O(1),因为虽然一些隐藏的蓬松的东西的大小,你需要是一个Java Object (Vtable,类的链)将随着inheritance层次增长而增长,他们增长每类,实例,并且JVM实现可以在连接到每个Object的常量大小头中存储指向这些实体的常量大小的指针。 所以从理论上讲,任何Java对象的内存表示直接附加的开销应该是O(1)的inheritance深度N.有谁知道在实践中是否是真的?

int((0.1 + 0.7)* 10)= 7在几种语言。 如何防止这一点?

最近我遇到了几种语言的错误/function。 我有一个非常基本的知识,它是如何引起的(我想要一些详细的解释),但是当我想到我多年来一直想要的所有错误时,问题是我怎样才能确定“ 嘿,这可能会导致一个riddiculous的错误,我最好使用任意的精度函数 “,其他语言有这个错误(和那些谁不, 为什么 )。 另外,为什么0.1 + 0.7这样做,即0.1 + 0.3没有,还有其他众所周知的例子吗? PHP //the first one actually doesn't make any sense to me, //why 7 after typecast if it's represented internally as 8? debug_zval_dump((0.1+0.7)*10); //double(8) refcount(1) debug_zval_dump((int)((0.1+0.7)*10)); //long(7) refcount(1) debug_zval_dump((float)((0.1+0.7)*10)); //double(8) refcount(1) python: >>> ((0.1+0.7)*10) 7.9999999999999991 >>> int((0.1+0.7)*10) 7 使用Javascript: alert((0.1+0.7)*10); //7.999999999999999 alert(parseInt((0.7+0.1)*10)); //7 ruby: >> […]

为什么更喜欢两个补码超过符号和数量签名的数字?

我只是好奇,如果有一个原因,为了在二进制表示-1,二进制补码使用:翻转的位和加1? -1表示为11111111(二进制补码),而不是(对我来说比较直观)10000001是二进制1,第一位是负数标志。 免责声明:我的工作不依赖二进制算术!