我在arduino中面对足够的内存,所以我决定我需要更改变量类型。考虑一下,我想知道 String 与 char (1byte)相比的字节大小。
我知道 String 是一个对象而 char 是一个变量类型。
答案 0 :(得分:1)
String
类中有三个成员变量:
char *buffer; // the actual char array
unsigned int capacity; // the array length minus one (for the '\0')
unsigned int len; // the String length (not counting the '\0')
所有这些广告都2 bytes
广(在AVR
平台上),所以如果你没有任何内容,那么它实际上可能只有6 bytes
。
但是,我想你确实需要一些东西,所以对于单个字符,你需要另外2个字节(一个用于该字符,一个用于终止NUL
个字符)。
并且由于buffer
是动态分配的,因此必须存储有关此分配的内容。
推荐阅读:The Evils of Arduino Strings
另一方面,C字符串更难以使用,但至少你可以完全控制。您可以在堆栈或堆上创建它(String类只能使用堆)。
字符串文字在AVR
平台上更加棘手,因为它们存储在程序存储器中,但也被复制到RAM中以占用您不能浪费的空间。有关Arduino - PROGMEM或Nick Gammon's forum或avr-libc pgmspace.h reference page的更多详情。