随笔分类 - C/C++语言
C和C++语言是学习JVM,Redis底层源码的必由之路。
摘要:native start0追踪到hotspot源码中 private void native start0(); native的原理是调用 JNI,而 Hotspot 源码的惯例则是,通常一个 Xxx.java 对应一个 Xxx.c, 以下举三个例子: | Java 类 | 相对于OpenJDK源码
阅读全文
摘要:1、下载要编译的源码 2、下载和解压jdk7 3、配置环境变量 4、apt-get安装依赖 5、执行configure & make 6、CLion单步调试需要用到CMakeLists.txt,以及Run/Debug 按钮都是灰色不可用(Toolchains明明已经配置好了)
阅读全文
摘要:Ubuntu 20.04
sudo apt install g++-5 gcc-5
E: 软件包 gcc-5 没有可安装候选
E: 软件包 g++-5 没有可安装候选
怎么办?
阅读全文
摘要:实现参考自 openjdk/hotspot/src/os_cpu/linux_x86/vm/atomic_linux_x86.inline.hpp long cmpxchg(long exchange_value, volatile long* dest, long compare_value);
阅读全文
摘要:问题描述 当我在 CLion 中新建一个 C++ Class 或者 C/C++ Header File 时,它为我们自动添加 #ifndef PROJECTNAME_FILENAME_H #define PROJECTNAME_FILENAME_H /* ... code ... */ #endif
阅读全文
摘要:什么是虚表? 虚表全称为虚拟函数表 在C++语言中,每个有虚函数的类或者虚继承的子类,编译器都会为它生成一个虚表 虚表存储在哪里? 对象头8B(如果是32位操作系统是对象头4B,如果是64位操作系统是对象头8B) 什么是虚函数? 虚函数就是函数前面用virtual来修饰它,用法格式为: virtua
阅读全文
摘要:一、字节对齐规则 【规则一】数据成员对齐规则:变量只能从他的长度的整数倍地址开始存储 第一个数据成员放在 offset 为 0的地方,以后每个数据成员的对齐按照操作系统的基本字节单位(32位操作系统为4,64位操作系统为8)和这个数据成员自身长度中,比较小的那个进行。 即以后每个数据成员放在 off
阅读全文
摘要:一、字节对齐规则 【规则一】数据成员对齐规则:变量只能存储在他的长度的整数倍地址上 结构(struct)(或联合(union))的数据成员,第一个数据成员放在 offset 为0的地方,以后每个数据成员的对齐按照**#pragma pack**指定的数值和这个数据成员自身长度中,比较小的那个进行。
阅读全文
摘要:本文翻译自 Using Assembly Language in Linux 本文将描述 Linux 平台下的汇编语言编程。本文包含 Intel 和 AT&T 语法 asm 之间的比较、系统调用使用指南和 gcc 中内联 asm 使用入门指南。 Intel汇编语法和AT&T汇编语法的区别 Intel
阅读全文
摘要:首先,我们调用一个普通函数的代码如下: #include <stdio.h> int new(); int main() { int obj1 = new(); printf("obj1=%d\n", obj1); return 0; } int new() { return 16; } 接着,我们
阅读全文
摘要:节选自 C语言-大小端序的详解 #include <netinet/in.h> //16位数据类型网络字节顺序到主机字节顺序的转换 #define ntohs(n) //16位数据类型主机字节顺序到网络字节顺序的转换 #define htons(n) //32位数据类型网络字节顺序到主机字节顺序的转
阅读全文
摘要:1. C语言中没有 class 关键字(那是 C++ 才有的),因此使用结构体及其关键字 struct 表示“类”;
2. C语言中也没有构造器,带参数的宏(例如 #define newXXX(arg0, arg1) {(arg0) , (arg1)}} 作用类似于 “类的构造器”;
3. C语言中也没有类的继承,运用结构体内嵌套其他结构体的方法,可以实现“组合”,效果类似于“继承”;
(例如 typedef struct { Validator proxy; ... } RangeValidator;)
4. C语言中也没有多态,运用函数指针(指向函数的指针)作为结构体的组成部分,通过传入不同的函数,可以实现“多态”的效果;
(例如 typedef struct { void (* swim)();} Animal;)
阅读全文
摘要:最近学习C语言,想用C语言写一个字节码解析器,而需要解析字节码文件,首先需要了解C语言是怎么以二进制形式读取文件的。 一、先上示例代码 #include <stdio.h> #include <stdlib.h> int main() { FILE* file; int i; char* filep
阅读全文
摘要:一、typedef简介 typedef的出现有着代码简化, 促进跨平台开发的目的。 typedef 行为有点像 #define 宏,用其实际类型替代同义字。 不同点: typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。 参考文档:《Typedef函数指针的用法》 二、ty
阅读全文
摘要:系统环境 软件 版本 备注 VMware 16.1.2 build-17966106 16 Pro,虚拟机 Ubuntu 20.04.2 LTS 安装在虚拟机中的操作系统 CLion 2021.1.2 运行C++项目的软件 1.安装SDK 1、安装JDK(编译运行Java语言的) sudo apt
阅读全文
摘要:1 指针 指针是什么?与内存地址的关系是什么? 下图是 4G 内存中每个字节单元和它的编号: 每个字节单元可以存储8个二进制位,即1个字节大小的内容; 字节单元也被称为内存单元; 为了方便寻址,每个内存单元都有唯一的编号,这个编号就是内存地址(Address)或者指针(Address) 地址从 0
阅读全文
摘要:C语言中为什么会有结构体 主要是基本数据类型没有办法展现我们需要的实体。比如我们要表现一个实体————人,那么我们需要姓名name,年龄age,性别sex,家庭关系如父母parent等等。 C语言如何定义结构体 在C语言中,可以使用结构体(Struct)来存放一组不同类型的数据。结构体的定义形式为:
阅读全文
摘要:《C语言printf函数的高级用法》阅读 头文件 printf 来自C语言头文件 stdio.h(标准IO),是C语言常用来打印日志的API。 #include <stdio.h> cout 则来自 C++ 头文件 iostream #include <iostream> 格式化参数 使用 prin
阅读全文
摘要:1、定义字符串 C语言本身没有string类型,通常使用char数组来表示字符串。常用的定义字符串的方式有: char str1[] = {'C', 'h', 'i', 'n', 'a'}; char str2[] = "China"; char* str3 = "China"; 与Java语言不同
阅读全文