直到最近,我才看到复制完成的结构字段memcpy().在类和在线指令中,将一个结构的内容复制到另一个结构中通常看起来像
struct block *b0 = malloc(sizeof(struct block));
struct block *b1 = malloc(sizeof(struct block));
/* populate fields in *b0 */
memcpy(b1, b0, sizeof *b1); /* copy contents of b0 into b1 */
/* free b0, b1 */
Run Code Online (Sandbox Code Playgroud)
但是,这个任务也可以通过简单的分配来替换memcpy().
*b1 = *b0; /* dereferenced struct assignment */
Run Code Online (Sandbox Code Playgroud)
有没有充分的理由说明为什么它没有被广泛使用(至少在我有限的经验中)?这两种方法是分配和memcpy()等价的,还是有一些令人信服的理由memcpy()一般使用?
我注意到Google的C++样式指南警告不要使用循环或switch语句来内联函数:
另一个有用的经验法则:使用循环或switch语句内联函数通常不具成本效益(除非在通常情况下,从不执行循环或switch语句).
对StackOverflow的其他评论重申了这种观点.
为什么带有循环或switch语句(或gotos)的函数不适合或与内联兼容.这适用于包含任何类型跳转的函数吗?它适用于带if语句的函数吗?另外(这可能有些不相关),为什么内联函数不推荐使用值?
我对这个问题特别感兴趣,因为我正在处理一段对性能敏感的代码.我注意到在内联包含一系列if语句的函数后,性能下降得非常显着.我正在使用GNU Make 3.81,如果那是相关的.