在堆栈上分配内存的标准过程是什么?我目前正在创建一个临时数组
const uint8_t _buf[buf_size];
const uint8_t* buf = _buf;
我再也不会使用_buf
。我很脏有更好的方法吗?
编辑:
我需要指针的原因是因为我将其传递给一个递增指针的函数。我不认为这与传递数组会很好。这里是更多详细信息:
const uint8_t _buf[buf_size];
const uint8_t* buf = _buf;
buf_size = fread((void *)buf, 1, buf_size, file);
// f increments the pointer in buf
f(&buf, &buf_size);
答案 0 :(得分:4)
您可以使用compound literal:
uint8_t* buf = (uint8_t[buf_size]){0};
在我的许多程序中,无论如何我都使用两个变量,因为如果调试器具有可读的名称,则更容易使用调试器跟踪内存。
答案 1 :(得分:3)
您可以使用alloca
阅读alloca
const uint8_t* buf = alloca(buf_size);
基本上,它在堆栈中分配大小字节的空间 呼叫者的框架。
我并不是说使用alloca
是更标准化的方式,但是至少您有机会检查alloca
的返回值。