
C/C++编程语言
文章平均质量分 61
总结C/C++编程语言的知识和应用。
冉冉云
嵌入式软件开发、linux爱好者
展开
-
C运行时错误——error realloc(): invalid next size
不妨设这段预留的内存大小为16字节,若我们获得的系统分配的内存块的起始地址为0x80300000, 设定的长度是0x200。除了分配给我们在参数中设定大小的内存(可能会有内存对齐,实际分配的比参数设定的要多),还会在这块所分配的内存之前预留出一块内存,记录所分配内存的位置、大小等。这样一来,在释放这块内存时就会出现问题,导致程序运行时崩溃。我们在malloc或calloc等API分配内存时,程序中出现的问题是无意中访问并改写了预留的16字节的。原创 2023-08-19 16:06:33 · 691 阅读 · 0 评论 -
也谈C语言的字符串字面量
1 什么是字符串字面量在C语言中,形如"hello world"的字符串即为字符串字面量(常量)。与之对比的是字符串变量,也即字符数组,形如char arr[] = "hello world"。两者在用法上有很多相似之处,但两者的存储属性是截然不同的。2 编译器眼中的字符串字面量我们经常会看到这种字符串字面量的用法:const char *p = "hello world";但千万不要以为在编译器眼里字符串字面量是const char *,之所以要强调这一点,是因为这会影响我们对sizeof("原创 2022-02-23 09:40:25 · 5561 阅读 · 0 评论 -
C语言的类型转换
C语言无符号数转换:#include <stdio.h>#define rol(var, shift) ({ unsigned long long _var = var; (typeof(var))(((原创 2021-11-21 00:25:54 · 1303 阅读 · 0 评论 -
GCC的内联汇编
想对着GCC手册总结以下内联汇编,但在网上看到一篇博客已经总结的很好了,就不再做重复的事情。给同样需要学习内联汇编的同学推荐这篇博客。顺带吐槽一下,GCC手册写的实在晦涩…原创 2021-11-04 23:55:31 · 839 阅读 · 0 评论 -
C语言的函数参数与栈
static int *pa0;static int *pa1;static int b0;static int b1;void test_func(int a0, int a1) { a0++; a1++; pa0 = &a0; pa1 = &a1;}42004f7c <test_func>:static int *pa0;static int *pa1;static int b0;st原创 2021-10-25 23:22:44 · 1969 阅读 · 1 评论 -
C语言的#、##以及宏定义的嵌套
以前在看u-boot源码的时候,看到一些宏定义非常奇怪,类似下面这样:#define __A_MACRO xxx#define _A_MACRO xxx#define A_MACRO xxx总之就像俄罗斯套娃那样,一个宏套着一个宏,当时不明白为什么要写成这么恶心的样子,也没有去细究。现在明白了,因此记录一下。C语言中的#和##有必要先提一下这两个token,它们在宏定义中使用,作用于宏参数:#:其作用为字符串化,将宏参数转换为一个字符数组(字符串字面量)##:其作用为粘贴两个宏参数原创 2021-10-24 23:56:38 · 4556 阅读 · 3 评论 -
GCC的attribute——format
1 解释format是GCC提供的众多attribute之一,这个attribute的作用是告知编译器检查传给相应函数的参数中的格式字符串:/* 这是用在声明的情况,用在定义也可以 *//* 一般全局函数用在声明,这样包含相应头文件并使用该全局函数的源码就会被编译器做相应检查 *//* 而局部函数就在本文件使用,无需声明,那么这个attribute可以直接用在定义 */extern in...原创 2020-04-04 22:54:35 · 1211 阅读 · 0 评论 -
浅析c程序中的屏障
目录1 编译屏障1.1 为什么需要编译屏障1.2 编译屏障会造成哪些影响2 内存屏障2.1 为什么需要内存屏障2.2 内存屏障会造成哪些影响3 总结参考文献1 编译屏障1.1 为什么需要编译屏障众所周知,从c源文件到可执行程序要经过预处理、编译、汇编、链接这4个步骤,其中编译这一步骤至关重要,负责将c语句翻译成相应的汇编语句,而在做这一步翻译时,编译器往往出于优化提升效率的考虑,对翻译得到的...原创 2020-03-12 10:51:12 · 1420 阅读 · 0 评论 -
浅析c语言的volatile关键字及数据一致性
目录1 一些基本概念1.1 现代处理器的存储体系1.2 内存与I/O统一编址1.3 修改内存单元的两条路子1.4 缓存带来的数据一致性问题1.5 访存优化带来的数据一致性问题1.6 外设带来的数据一致性问题2 volatile的作用2.1 volatile关键字2.2 易变的变量2.3 volatile解决数据一致性问题2.4 volatile能作为屏障吗?2.3 volatile适合线程间的同步...原创 2020-03-12 10:49:22 · 1479 阅读 · 0 评论 -
c++ invalid comparator
问题描述在leetcode上做题目的时候,用到了stl的sort函数,给vector排序,程序大致如下: ... sort(test.begin(), test.end(), [](auto &lhs, auto &rhs) { return lhs <= rhs; }); ...提交之后,通过了部分用例,然后执行失败,leetcod...原创 2020-03-05 14:56:41 · 7308 阅读 · 8 评论 -
C++算数类型的隐式转换
最近看《C++ Primer》第五版中文版,看到第四章算术类型转换部分,感觉部分内容书上阐述不太详尽,因此另做了些测试和记录。对算术类型隐式转换的说明C++的算数类型包含了字符、整型、布尔型以及浮点型,算术类型之间能够相互转换,将一种算术类型转换为另一种算术类型就被称为算术转换。这种转换可以显示的进行,即手动进行强制类型转换,例如:char c = 0;int a = (int)c; //...原创 2019-04-02 16:49:12 · 540 阅读 · 0 评论