还是我理解错了?

解决方案 »

  1.   

    java中是1bit?不可能的吧bool内部作为int类型处理,很正常呀,浪费那么几个位对性能只有正面影响,没有负面影响
      

  2.   

    http://topic.csdn.net/u/20071128/11/19AF0938-3700-4BB9-A84D-95A2908F8BBB.html确实是一个比特阿,为什么底层要四字节对齐,不是浪费么?我觉得是不是C#里value types也都是object,可以调用方法,所以占的大?java里的primary type不能调用方法,只是0/1来表示,所以小
      

  3.   

    我现在只知道C#里一切比4 bytes小的数据都是转换成4bytes 处理的。但是存储还不清楚。
      

  4.   


    sbyte就1byte,也要转成4bytes? 
      

  5.   

    sizeof(bool) // 输出 1            bool b = true;
                Console.WriteLine(sizeof(bool));
                unsafe
                {
                    bool* p = &b;  //p = 0x0431e510, 打开内存监视窗口, 定位到此处
                    {
                        *++p = true;  // 在内存监视窗口中可以看到  0x0431e511 变成 01 了 
    //(如果bool占4字节, 应该是 0x0431e514 吧)
                    }
                }结论, bool 就是占1字节的
      

  6.   

    那书上写错了?不能把,70-536上写的4bytes
      

  7.   

    Although a boolean value requires only 1 bit (0 or 1), it occupies 1 byte of storage, since this is the minimum chunk with which addressing on most processor architectures can work. Each element in a boolean array uses two bytes of memory. 
      

  8.   

    呵呵,如果是个连续bool变量在内存中是1b .比如 bool[] b=new bool[32]; 应该是1b * 32= 4B 但是 bool b=new bool; 应该也是1b ,但是32位电脑开内存应该是不够4B (32位)的也要 4B .-------------------以上为个人理解,无事实根据------------
      

  9.   

    把书上的原文贴下,是不是1byte要看上下文环境
      

  10.   

    70-536 1st ed那简直就是错误大全啊……当时看书时,勘误表打印了将近20页。第二版虽然改了不少,但竟然还有一部分错误存在。唉。
      

  11.   

    虽然没搞过java,但LZ所说java用1bit(一个二进制位)表示bool偶认为不太可能.简单是绝不可能.其理由: 1.如果用bit位, 那么势必多个bool会挤在一个字节里面(如果不是,那用bit有何意义呢)
           2.造成寻址困难, 会造成很多位操作
            3.通用性极差, 试想如果是一个bool的数组,天哪,编译器都不知道怎样处理.
           4.如何将很多个离散的bool变量为了节约空间挤在一个或多个字节里,也是编译器的一个沉重的负担. 用1byte表示倒是有可能.
      

  12.   

    这个要看什么地方的
    字段、数组、参数是1byte的
    但是在evaluation stack里面是4byte的如果lz要每个bool占用1bit的话,可以考虑用BitArray(最终使用int[]保存数据,每32个bool使用1个int)或者BitVector32(最终使用一个int保存数据,所以最多放32个bool值)