c++
c++
kong-kong
记录流水账
展开
-
char*
例子 char *str = "12345678"; for(char i=0;i<8;i++) { printf("str[%d] = %c(%d) \n", i,*str,*str); str++; }输出str[0] = 1(49)str[1] = 2(50)str[2] = 3(51)str[3] = 4(52)str[4] = 5(53)str[5] = 6(54)str[6] = 7(55)str[7] = 8(56)原创 2022-05-05 23:07:33 · 279 阅读 · 0 评论 -
add esp,8
test1函数int test1(int a, int b) { return a + b;}汇编00A83CE3 mov eax,dword ptr [b] 00A83CE6 push eax 00A83CE7 mov ecx,dword ptr [a] 00A83CEA push ecx 00A83CEB call test1 (0A811DBh) 00A83CF0 add原创 2022-03-20 12:30:13 · 1282 阅读 · 0 评论 -
MutexLocker ml(Heap_lock);
常见写法jvm源码有很多这种类型写法的代码MutexLocker ml(Heap_lock);ObjectWaiter node(Self);等这里以MutexLocker举例MutexLocker ml(Heap_lock);MutexLockerclass MutexLocker: StackObj { private: Monitor * _mutex; public: MutexLocker(Monitor * mutex) { // MutexLocker ml(He原创 2022-02-04 20:57:06 · 387 阅读 · 0 评论 -
gdb调试查看内存数据
gdb查看内存数据格式x /nfuf 显示方式x 按十六进制格式显示变量。d 按十进制格式显示变量。u 按十进制格式显示无符号整型。o 按八进制格式显示变量。t 按二进制格式显示变量。a 按十六进制格式显示变量。i 指令地址格式c 按字符格式显示变量。f 按浮点数格式显示变量。u 显示方式b表示单字节,h表示双字节,w表示四字节,g表示八字节测试# 20: 数量# x:16进制# h: 双字节x /20xh 0x61FDFC参考文档参考文档..原创 2022-01-28 15:52:49 · 6046 阅读 · 0 评论 -
dictEntry-单向列表
demo#include <stdio.h>#include <stdlib.h>typedef struct dictEntry { void *key; /** key */ void *val; struct dictEntry *next;} dictEntry;typedef struct dict { dictEntry* dictEntry;}dict;int main(){ int nums[10原创 2022-01-28 13:06:10 · 899 阅读 · 0 评论 -
c指针-用于忘记看看
例子int main() { int a = 10; // *b的类型是int int *b = &a; // b存的是a地址 // **c的类型是int int **c = &b; // *c = b存的地址 = a 地址 c = b的地址 cout << "&a=" << &a << endl; cout << "b=" << b <&l原创 2021-12-28 18:32:53 · 489 阅读 · 2 评论 -
gdb简单调试
demo1int main() { const char src[] = "abcdefghi"; const char dest[] = "123456789"; cout << "src.first.address=" << &src << endl; cout << "dest.first.address=" << &dest << endl; return 1;原创 2021-12-28 18:21:05 · 388 阅读 · 0 评论 -
memmove
声明void *memmove(void *dest, const void *src, size_t n)参数dest – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。src – 指向要复制的数据源,类型强制转换为 void* 指针。n – 要被复制的字节数。例子#include <iostream>using namespace std;int main() { const char src[] = "abcdefghi";原创 2021-12-28 18:20:04 · 245 阅读 · 0 评论 -
XOR汇编指令
XORXOR destination, sourceXOR 指令操作数组合和大小与 AND 指令及 OR 指令相同。两个操作数的每一对对应位都应用如下操作原则:如果两个位的值相同(同为 0 或同为 1),则结果位等于 0;否则结果位等于 1。清0如果destination 和 source 是同个寄存器,则相当于清0# 清0 xor eax,eax# 清0 xor ebx,ebx参考文档http://c.biancheng.net/view/3558.html...原创 2021-12-06 22:23:30 · 4475 阅读 · 0 评论 -
c++::例子
父类调用子类#include <iostream>using namespace std;class Animal {public: virtual void cry(){ cout << "Animal Cry" << endl; } void name(){ cout << "Animal Name " << endl; }};class Dog : publ原创 2021-11-28 23:54:32 · 429 阅读 · 0 评论 -
c++多态例子
导入头#include <iostream>using namespace std;Animalclass Animal {public: virtual void cry(){ cout << "Animal Cry" << endl; } void name(){ cout << "Animal Name " << endl; }};Dogclass Do原创 2021-11-28 23:35:53 · 218 阅读 · 0 评论 -
pthread_cond_signal例子
//// Created by kongqi on 2021-11-24.//#include "mythreadsignal.h"#include<pthread.h>#include <iostream>#include<unistd.h>#include <iostream>using namespace std;pthread_mutex_t mutexm2 = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥原创 2021-11-24 22:01:32 · 667 阅读 · 0 评论 -
int num = 10 和 int num1(20)
demoint main() { int num = 10; int num1(20); std::cout << "num=" << num << std::endl; std::cout << "num1=" << num1 << std::endl; return 0;}输出num=10num1=20原创 2021-11-20 23:48:25 · 1379 阅读 · 0 评论 -
指针demo
demoarr[0] = ‘d’;arr[1] = ‘a’;// 2-5位存int的值168168arr[2-5] = 168168;int main3(){// char c[4];// int i=100;// *(int*)c = i; char arr[100]; arr[0] = 100; //d arr[1] = 'a'; char *p = (char*)&arr; cout << "addr原创 2021-11-16 22:45:19 · 532 阅读 · 0 评论 -
指针遍历对象
基础数据#include <iostream>#ifndef FIRSTDEMO_EMPLOYEE_H#define FIRSTDEMO_EMPLOYEE_Husing namespace std;class Person {public: int id; int age; Person() { } Person(int id, int age) { this->id = id; this-原创 2021-11-12 20:16:15 · 978 阅读 · 0 评论 -
ubuntu21,clion调试openjdk12源码
编译jdksudo bash configure --with-debug-level=slowdebug --with-target-bits=64 --disable-warnings-as-errors --enable-dtrace --with-jvm-variants=server参数说明--with-boot-jdk:指定Bootstrap JDK路径--with-debug-level:编译级别,可选值为release、fastdebug、slowdebug和optimized,默原创 2021-10-17 01:11:06 · 602 阅读 · 0 评论 -
ubuntu21编译openjdk12
installsudo apt-get install build-essentialsudo apt-get install libfreetype6-devsudo apt-get install libcups2-devsudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-devsudo apt-get install libasound2-devsudo ap原创 2021-10-16 22:41:05 · 553 阅读 · 1 评论 -
Ubuntu Clion环境配置
install makesudo apt install makeinstall gccsudo apt install gccinstall g++sudo apt install g++配置clion原创 2021-10-16 16:01:22 · 885 阅读 · 0 评论 -
pthread相关函数
pthread_getpecific和pthread_setspecific是实现同一个线程中不同函数间共享数据的一种很好的方式#include <pthread.h>int pthread_setspecific(pthread_key_t key, const void *value);void *pthread_getspecific(pthread_key_t key);os::thread_local_storage_at_puthotspot\src\os\linux\原创 2021-10-15 20:37:00 · 378 阅读 · 0 评论 -
gcc编译
例子1gcc main.c list.c map.c -I./ -lpthread -o main参数解释-lpthread-lpthread是在链接阶段,链接这个库-l (L的小写)指定需要链接的库的名字-I ( i 的大写)指定头文件路径(相对路径或决定路径,建议相对路径)-o用于指定要生成的结果文件 o就是output-c-c告诉gcc对源文件进行编译会汇编,但不进行链接...原创 2021-10-15 01:28:25 · 198 阅读 · 0 评论 -
pthread.h
变量typedef uintptr_t pthread_t;typedef long pthread_once_t;typedef unsigned pthread_key_t;typedef unsigned pthread_mutexattr_t;typedef void *pthread_barrierattr_t;typedef int pthread_condattr_t;typedef int pthread_rwlockattr_t;typedef int clocki原创 2021-10-09 09:29:37 · 207 阅读 · 0 评论 -
inet_pton函数 和inet_ntop函数
inet_pton函数将点分十进制串转换成网络字节序二进制值,此函数对IPv4地址和IPv6地址都能处理。int inet_pton(int family,const char * strptr,void * addrptr);//返回:1---成功 0---输入不是有效的表达格式 -1---失败 第一个参数可以是AF_INET或AF_INET6:第二个参数是一个指向点分十进制串的指针:第三个参数是一个指向转换后的网络字节序的二进制值的指针。inet_ntop函数和inet_pton函转载 2021-09-04 23:36:57 · 646 阅读 · 0 评论 -
zrealloc
声明void *realloc(void *ptr, size_t size)参数ptr -- 指针指向一个要重新分配内存的内存块,该内存块之前是通过调用 malloc、calloc 或 realloc 进行分配内存的。如果为空指针,则会分配一个新的内存块,且函数返回一个指向它的指针。size -- 内存块的新的大小,以字节为单位。如果大小为 0,且 ptr 指向一个已存在的内存块,则 ptr 所指向的内存块会被释放,并返回一个空指针。demo#include <stdio.h>转载 2021-09-04 21:39:46 · 422 阅读 · 0 评论 -
memmove
函数void *memmove(void *s1, const void *s2, size_t n)参数s1 – 指向用于存储复制内容的目标数组,类型强制转换为 void* 指针。s2 – 指向要复制的数据源,类型强制转换为 void* 指针。n – 要被复制的字节数。返回值该函数返回一个指向目标存储区 s1 的指针demo#include <stdio.h>#include <string.h>int main() { const cha原创 2021-09-04 21:09:14 · 290 阅读 · 0 评论 -
typedof
描述typedof并没有创建任何新类型,它只是为某个已存在的类型增加一个方便使用的标签。例子例子1typedef unsigned int MYINT;使用MYINT ii = 168;例子2typedef struct Book { int id; char * name;} BK;使用BK b = {5,"c++"};printf("id=%d , name=%s \n",b.id,b.name);...原创 2021-03-07 20:17:51 · 464 阅读 · 0 评论 -
Clone succeeded, but checkout failed. drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c
错误信息拉取linux的git源码到windows的时候,报下面的错error: invalid path ‘drivers/gpu/drm/nouveau/nvkm/subdev/i2c/aux.c’fatal: unable to checkout working treewarning: Clone succeeded, but checkout failed.You can inspect what was checked out with ‘git status’and retry原创 2021-03-07 08:00:09 · 5360 阅读 · 1 评论 -
指针初始化
初始化指针几种初始化: 某个变量地址 内存地址 或者字符串常量 或者NULL某个变量地址int i= 10;int *p2 = &i; //声明1个指针p2,并直接初始化为变量i的值char letter = 'L';char *myLetter = &letter; // 声明1个指针变量myLetter 并直接初始化为letter的地址内存地址char * name = (char*)malloc(10); //声明1个字符指针nam...原创 2021-03-05 23:39:26 · 3085 阅读 · 0 评论 -
sizeof
指针大小指针 X86占4个字节 X64占8个字节int b = 10;int *pb = &b;printf("b.size=%d b=%p \n",sizeof(b),b);printf("pb.size=%d pb=%p \n",sizeof(pb),pb);b.size=4 b=000000000000000Apb.size=8 pb=000000000061FE04...原创 2021-03-05 23:04:34 · 234 阅读 · 0 评论 -
二级指针
二级指针void swap1(int *a, int *b) { int temp = *a; *a = *b; *b = temp;}void swap2(int **a, int **b) { int t = **a; **a = **b; **b = t;}// 高级一点使用void**只是为了通用,可以交换各种类型void swap3(void **a, void **b){ void *t; t =*a;...原创 2021-03-05 20:50:02 · 214 阅读 · 0 评论 -
c和c++ struct比较
c#include <stdio.h>// 注意 typedof 需要定义nametypedef struct Dog { int id; const char *name;} DD;typedef struct Pig { int id; char *name;} Hog;struct Tiger { int id; char *name;};//struct Lion { int id; char *n原创 2021-03-05 20:47:17 · 516 阅读 · 0 评论 -
互斥锁 mutex
#include "iostream"#include "thread"#include "mutex"using namespace std;int num=0;mutex m;/** * 线程不安全 */void run(){ clock_t start = clock(); for(int i=0;i<1200000;i++) { num++; } clock_t end = clock(); cout <原创 2021-03-04 23:26:11 · 258 阅读 · 1 评论 -
epoll
EPool.cepollCreateJNIEXPORT jint JNICALLJava_sun_nio_ch_EPoll_epollCreate(JNIEnv *env, jclass c) { /* * epoll_create expects a size as a hint to the kernel about how to * dimension internal structures. We can't predict the size in advan原创 2021-03-04 23:03:37 · 213 阅读 · 1 评论 -
内嵌汇编例子
语法解释__asm__ __violate__ ("movl %1,%0" : "=r" (result) : "m" (input));movl %1,%0"是指令模板;"%0"和"%1"代表指令的操作数,称为占位符,本例中只有两个:"result"和"input",他们按照出现的顺序分 别与指令操作数"%0","%1"对应;注意对应顺序:第一个C 表达式对应"%0";第二个表达式对应"%1",依次类推,操作数至多有10 个,分别用"%0","%1"...."%9"表示。"resu原创 2021-03-03 23:36:15 · 870 阅读 · 1 评论 -
IA-32 Assembly Language Reference Manual
IA-32IA-32 Assembly Language Reference ManualcmpxchgCompare and Exchange (cmpxchg)[486]cmpxchg{bwl} reg[8|16|32], r/m[8|16|32]Examplecmpxchgb %cl, 1(%esi)cmpxchgl %edx, 4(%edi)https://docs.oracle.com/cd/E19455-01/806-3773/6jct9o0b0/index.html原创 2021-03-03 18:33:01 · 303 阅读 · 1 评论 -
简单了解C语言内嵌汇编
内嵌汇编有个固定格式asm ( assembler template /* 汇编语句 */ : output operands /* 输出 */ : input operands /* 输入 */ : list of clobbered registers );cmpxchgl的描述Compares the value in the AL, AX, EAX, or RAX转载 2021-03-02 21:43:48 · 565 阅读 · 0 评论 -
memset
memset函数void *memset(void *str, int c, size_t n)C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符#include <stdio.h>#include <string.h>int main(){ char str[50]; strcpy(str,"welcome to c lan原创 2021-03-01 23:06:31 · 201 阅读 · 0 评论 -
window安装clion
install mingw先下载 mingw64install clionconfig mingw原创 2021-03-01 20:13:10 · 228 阅读 · 0 评论 -
memcpy
头文件#include <string.h>memcpy() 用来复制内存,其原型为:void * memcpy ( void * dest, const void * src, size_t num );memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest 所指的内存地址上。memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。注意dest 指针要分配足够...转载 2021-02-28 23:47:44 · 18945 阅读 · 0 评论 -
malloc
mallocmalloc只管分配内存,并不能对其进行初始化,所以得到的一片新内存中,其值将是随机的。一般意义上:我们习惯性的将其初始化为NULLmalloc 函数其实就是在内存中:找一片指定大小的空间,然后将这个空间的首地址给一个指针变量,这里的指针变量可以是一个单独的指针,也可以是一个数组的首地址, 这要看malloc函数中参数size的具体内容。我们这里malloc分配的内存空间在逻辑上是连续的void * void * p1; int *p2; p1 = p2;原创 2021-02-28 22:16:51 · 480 阅读 · 0 评论 -
clion切换GDB 和 LLDB
GDB 和 LLDB原创 2021-02-28 00:51:38 · 2358 阅读 · 0 评论