如何在c中调整数组的大小? 32位单片机

How to size an array in c? 32 bit mcu

下面这行 C 代码创建了一个数组来存储来自相机的图片。图片大约22kb。

uint8_t picturearray[32*1024];

单片机是32位的。我只是想知道为什么是 32*1024?它是 32 因为它是 32 位的吗?为什么会是 1024?

谢谢

是因为它要32KB的内存。一千字节是 1024 字节,32*1024 是 32 千字节。

这是一种编写自文档化代码的尝试。 32 * 1024 "give me 32kb" 的提示。它比 32768 更清楚,后者只是一个奇怪的 "magic number",没有给出任何解释。

(但显然不够清楚,不然你不会问这个问题。)

更清晰的写法应该是这样的:

#define SIZE_32KB (32u * 1024u)
...
uint8_t picturearray [SIZE_32KB];

或者也许

#define SIZE_KB 1024u
...
uint8_t picturearray [32u * SIZE_KB];

注意:在 8/16 位系统上,32 * 1024 将是一个严重的错误!它会给出整数溢出和未定义的行为。在上面的整数常量上使用 u 后缀,以使代码可移植。