我的大部分代码都涉及将内存位置的地址传递给几个完成所需工作的宏。
您能否解释一下从时间效率角度来看哪种方式是传递地址的最佳方式。
示例代码:
#define FILL_VAL(ptr /* uint8_t* */ ) \
do \
{ \
/* Macro which does the job */ \
\
}while(0);
uint8_t *buf = malloc(100);
uint16_t buf_index = 0;
//Method 1:
FILL_VAL(&buf[buf_index])
//Method 2:
FILL_VAL( buf + buf_index)
最佳答案
宏/定义只是文本替换。因此,它们不能直接影响目标程序的“时间/空间/任何效率”。
所以基本上你的问题必须改写为“我的编译器是否会为包含 buf + buf_index
和 &buf[buf_index]
的(类似)表达式生成相同的代码”?
实际上,只有现场实验才能证明这一点,但生成的代码将是相同的是一个非常合理的猜测。
关于c++ - 将指针传递给宏的省时方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59748206/