简而言之,我遵循这些规则来决定如何分配内存块。我在嵌入式设备上工作,时间和空间限制加剧,每当我看到VLA时,我都会畏缩,因为我不知道底层实现将做什么,以及它是否会做出正确的选择。所以我的经验法则是离他们远点。是否有使用VLA而不是经典的malloc或静态分配的情况,特别是在嵌入空间方面?
jdgnovmf1#
我想不出在嵌入式空间中如何很好地使用VLA。我很难想出一个好的应用程序空间使用。我过去在标记或操作字符串时使用它们作为工作存储:
void tokenize( const char *str ) { /** * Copy input string to temporary buffer and tokenize * that buffer, leaving the original string unmolested */ char tmp[strlen( str )+1]; strcpy( tmp, str ); char *tok = strtok( tmp, " " ); while ( tok ) { // do something interesting with the token tok = strtok( NULL, " " ); } }
但这不是我经常做的事。
epfja78i2#
自动VLA通常不是很有用,但VM类型有一些用途:
#include <stdio.h> void f(const size_t size, const int buf[static size]); int main(void) { int arr[50] = { 0 }; f(10, arr); // acceptable f(50, arr); // correct f(100, arr); // *WARNING* return 0; }
malloc()
// `n` and `m` are variables with dimensions int (*arr)[n][m] = malloc(sizeof *arr); if (arr) { // (*arr)[i][j] = ...; free(arr); }
2条答案
按热度按时间jdgnovmf1#
我想不出在嵌入式空间中如何很好地使用VLA。我很难想出一个好的应用程序空间使用。
我过去在标记或操作字符串时使用它们作为工作存储:
但这不是我经常做的事。
epfja78i2#
自动VLA通常不是很有用,但VM类型有一些用途:
malloc()
调用分配多维数组