![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++基础
文章平均质量分 91
arvin_xiaoting
岁月静好~
展开
-
#C++# #likely# #unlikely#减少CPU流水线分支预测错误带来的性能损失
在后一种情况下,需要CPU丢掉为跳转指令之后的所有指令所做的工作,再开始从正确位置处起始的指令去填充流水线,这会导致很严重的惩罚:大约20-40个时钟周期的浪费,导致程序性能的严重下降。现代CPU为了提高执行指令执行的吞吐量,使用了流水线技术,它将每条指令分解为多步,让不同指令的各步操作重叠,从而实现若干条指令并行处理。汇编如下,我们看到,if分支中的指令被编译器放置于分支跳转指令jle相邻的位置,即CPU流水线在遇到。,用于修饰if/else if分支,表示该分支的条件更有可能被满足。原创 2022-08-25 13:39:09 · 948 阅读 · 0 评论 -
#C++基础# 内存分配函数:malloc,calloc,realloc,_alloca, new, free, delete
malloc:void *malloc(size_t size);功能:在堆区申请空间长度为size字节连续的内存块。 参数:size--申请空间长度字节大小 返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定)即申请空间的首地址,否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象...原创 2020-03-25 15:00:50 · 29142 阅读 · 0 评论 -
#C++基础# inline __forceinline __attribute__((always_inline)内联函数
inlineinline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。这样可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。关键字inline必须与函数定义放在一起才能使函数成为内联函数,仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现”的关键字,而不是一种“用于声明”的关键字。错误全局函数例子:...原创 2020-03-19 14:16:23 · 31405 阅读 · 0 评论