我想知道在 C 中读取和存储字符串列表的内存效率最高的方法是什么。
每个字符串可能有不同的长度,所以预先分配一个大的二维数组会很浪费。 我还想避免为每个字符串使用单独的 malloc,因为可能有很多字符串。
字符串将从一个大缓冲区读取到我正在询问的这个列表数据结构中。
是否可以通过一次完全正确大小的分配来单独存储所有字符串?
我的一个想法是将它们连续存储在一个缓冲区中,然后有一个 char * 数组指向缓冲区中的不同部分,其中将以 '\0' 来分隔。不过,我希望有更好的方法。
struct list {
char *index[32];
char buf[];
};
数据结构和字符串将是严格只读的。
最佳答案
假设您事先知道所有字符串的长度,这是一种稍微有效的格式:
|| total size | string 1 | string 2 | ........ | string N | len(string N) | ... | len(string 2) | len(string 1) ||
您可以将长度存储在固定宽度整数或可变宽度整数中,但重点是您可以跳到最后并相对有效地扫描所有长度,并从length sum 你可以计算字符串的偏移量。当没有剩余空间时,您知道什么时候到达最后一个字符串。
关于c - 在 C 中读取和存储字符串列表的最节省内存的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22350147/