Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自C++;to C#//结构内存优化_C#_C++ - Fatal编程技术网

来自C++;to C#//结构内存优化

来自C++;to C#//结构内存优化,c#,c++,C#,C++,@Zbyl我在这个帖子中看到了你的答案() 我非常喜欢Bitvector32方法,但出于优化的目的:如果我有大量大小为8位/12位(小于32位)的结构,该怎么办,无论如何,是否有比Bitvector32更少的方式来实现它,因为这将是一个永远不会被使用的大量内存分配:我将只使用Bitvector32的前8位。 下面是我想在C#中制作的一个结构示例: 首先,我会考虑实际处理的结构的数量。今天配备GB内存的硬件应该能够轻松处理数千个结构,即使每个结构浪费三个字节(1000000个结构将占用4MB的可用

@Zbyl我在这个帖子中看到了你的答案() 我非常喜欢Bitvector32方法,但出于优化的目的:如果我有大量大小为8位/12位(小于32位)的结构,该怎么办,无论如何,是否有比Bitvector32更少的方式来实现它,因为这将是一个永远不会被使用的大量内存分配:我将只使用Bitvector32的前8位。 下面是我想在C#中制作的一个结构示例:


首先,我会考虑实际处理的结构的数量。今天配备GB内存的硬件应该能够轻松处理数千个结构,即使每个结构浪费三个字节(1000000个结构将占用4MB的可用空间,可能大于1000MB)。考虑到这一点,您甚至可以完全不使用位字段,每个字段只有普通字节(但是,您的setter应该检查范围),结果是6个字节而不是4个字节(可能还有两个字节用于对齐问题),但让您更快地访问值(getter),因为不需要位篡改


另一方面:最后的位字段只不过是一种方便的方式,让编译器编写您自己编写的代码。但是,只要稍加练习,自己处理这些位并不是一项太难的任务,请参见您提到的主题(“手工存取器”部分),在内部将所有数据存储在
byte
类型的变量中,并通过位移位和掩蔽访问它。

我看到您也优化了字段名。您的意思是什么???@Dmitibdnikov表示您选择了非常短的名称…@AhmedAekBenJemia他表示您应该使用
无符号字符阻塞:1而不是
无符号字符bl:1;//已阻止/未阻止
。您的程序在内存中保存了多少8位/12位结构?
   struct iec_qualif
{
    unsigned char var :2;
    unsigned char res :2;
    unsigned char bl :1; // blocked/not blocked
    unsigned char sb :1; // substituted/not substituted
    unsigned char nt :1; // not topical/topical
    unsigned char iv :1; // valid/invalid
};