首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >语言特性:优化布尔到标志+位掩码

语言特性:优化布尔到标志+位掩码
EN

Stack Overflow用户
提问于 2009-09-10 19:22:46
回答 2查看 531关注 0票数 1

我正在编写一种编程语言,当我遇到this question时,我的直接想法是,语言应该将布尔语言优化为程序员的位标志。这将保留速度和有效使用内存的所有好处,同时消除维护的负担和由更复杂的位操作造成错误的可能性。

如果存在只存储一组布尔值的情况,则可能不希望进行此优化。基本上,如果您有8 bits for flags + 8 bit masks * 8 bits per bit mask = 72 bits而不是8 booleans * 8 bits per boolean = 64 bits。但是,只要你有两个副本的布尔,它就变成了2 copies * 8 bits for flags + 8 bit masks * 8 bits per bit mask = 80 bits2 copies * 8 booleans * 8 bits per boolean = 128 bits。这似乎是几个情况下,布尔人将是更多的存储-最优将很容易被发现,所以我们不能应用优化。

语言不支持这种优化有什么原因吗?我环顾四周,似乎没有任何一种语言会这样做(我可能只是找不到合适的地方)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-10 21:03:35

我见过人们用汇编语言来做这些事情,他们把布尔人打包成文字来节省空间,然后编写大量的指令来获取/设置比特。

显然,在速度和内存方面,在打包布尔包和不打包它们之间是一种权衡,我个人不愿让编译器为我决定这一点。

票数 0
EN

Stack Overflow用户

发布于 2010-01-07 03:07:17

C真的..。

代码语言:javascript
运行
复制
#include <stdio.h>

typedef struct foo_s {
    unsigned char field1 :1;
    unsigned char field2 :1;
    unsigned char field3 :4;
    unsigned char field4 :2;
} foo_t;

int main() {
    printf("%d\n", sizeof(foo_t));
    return 0;
}

运行时,这四个字段被打包为一个字节:

代码语言:javascript
运行
复制
$ gcc -Wall -o bittest bittest.c 
$ ./bittest 
1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1407209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档