我想到的第一个想法是Ruby只为字符串分配了一大块内存 - 但是,当然,这看起来非常低效,因此不太可能.
这对我的编程没有直接影响,但我很好奇.谢谢!
非常粗略地,Fixnums表示计算机可以存储在处理器寄存器中并执行基本算术的数字.Bignums是必要的,因为它们表示根据定义不能存储在单个寄存器中的数字,因此需要"特殊"处理,称为任意精度算术,以便对它们执行算术运算.
在计算机科学中,任意精度算术,也称为bignum算术[...]表示对精度数字仅受主机系统可用内存限制的数字执行计算.这与大多数算术逻辑单元(ALU)硬件中的更快的固定精度算法形成对比,后者通常提供8到64位的精度.
对于字符串,没有这样的区别.任意长的字符串从不在处理器指令级别对其执行算术,因此没有理由区分"短"字符串和"长"字符串.
关于记忆:
(小)数字可以直接作为实际的二进制CPU指令进行操作,因为它们完全适合单个CPU内存地址(称为寄存器).
(大)数字和字符串都不能,因为它们会溢出处理器的"位数".(这就是"64位处理器"的含义:单个数值可以表示和操作,最高可达64位.)
字符串在内存中分配为一系列代表字符的数字(不同的数字代表不同的字符,具体取决于所选的编码,如UTF-8或ASCII),它们跨越多个内存位置.字符串永远不会通过CPU作为原子单位提供,而Fixnums则是.
Bignums同样不能在ALU中处理,因为每个值(可能)占用的内存比单个CPU寄存器中可用的内存多,所以一个单独的包定义了必要的数学运算来分解非常大的数字,执行算术运算使用ALU和复合材料的较小部件,各个答案必须分开编写.
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |