使用无符号字符数组有效存储内存

Using unsigned char array to store memory efficiently

本文关键字:有效 存储 内存 数组 字符 无符号      更新时间:2023-10-16

我一直在寻找一种有效的存储内存的方法,所以我意识到无符号字符只使用一个字节的内存。考虑到这一点,我制作了一个小程序,可以获得每个变量的字节大小。

int main() {
int myInt = 10;
long long myLongLong = 10;
unsigned char charArray1[] = { 10, 10, 10, 10 };
unsigned char charArray2[] = { 10, 10, 10, 10, 10, 10, 10, 10 };
std::cout << "Using sizeof () we get:" << std::endl;
std::cout << "myInt -> " << sizeof(myInt) << std::endl;
std::cout << "myLongLong -> " << sizeof(myLongLong) << std::endl;
std::cout << "charArray1 -> " << sizeof(charArray1) << std::endl;
std::cout << "charArray2 -> " << sizeof(charArray2) << std::endl;
return 0;
}

输出:

Using sizeof () we get:
myInt -> 4
myLongLong -> 8
charArray1 -> 4
charArray2 -> 8

说我可以将字节存储在无符号字符数组中是正确的吗?如果正确的话,我如何从无符号字符中获得一些矩阵元素并将它们分配给变量?

示例:如果一个整数在内存中占据4个字节,我可以从无符号char数组中获得4个元素,并将其分配给一个整数。

说我可以在无符号char数组中存储字节是正确的吗?

是。

如果一个整数占用内存中的4个字节,我可以从无符号char数组中获得4个元素,并将其分配给一个整数。

如果且仅当数组包含与系统本机使用的格式完全相同的整数字节时,则可以执行以下操作:

static_assert(sizeof myInt == sizeof charArray1);
std::memcpy(&myInt, charArray1, sizeof myInt);

如果格式不相同,那么只要知道字节代表什么,仍然可以计算值。