如何在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
后缀,以使代码可移植。
下面这行 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
后缀,以使代码可移植。