• 2024-09-30C++ Data Member Pointers 和 Member Function Pointers
    https://itanium-cxx-abi.github.io/cxx-abi/abi.html#member-pointers2.3MemberPointers2.3.1DataMemberPointersThebasicABIpropertiesofdatamemberpointertypesarethoseofptrdiff_t.Adatamemberpointerisrepresentedasthedatamember's
  • 2024-09-10c++引用
    c++指针和引用的区别指针和引用在C++中都用于间接访问变量,但它们有一些区别:指针是一个变量,它保存了另一个变量的内存地址;引用是另一个变量的别名,与原变量共享内存地址。指针(除指针常量)可以被重新赋值,指向不同的变量;引用在初始化后不能更改,始终指向同一个变量。指针可以为
  • 2024-08-24《Programming from the Ground Up》阅读笔记:p103-p116
    《ProgrammingfromtheGroundUp》学习第7天,p103-p116总结,总计14页。一、技术总结1.读写文件(1)linux.slinux.s:#filename:linux.s#systemcallnumbers(按数字大小排列,方便查看).equSYS_READ,0.equSYS_WRITE,1.equSYS_OPEN,2.equSYS_CLOSE,3.equSYS_EXI
  • 2024-07-31ucontext源码分析
    gcc函数调用进入一个函数后的栈布局/*+----------------------------+|第6个参数后的参数(如果有)|+----------------------------+|返回地址(调用函数的下一个指令)|+----------------------------+|上一个函数rbp|+----------------------------+|
  • 2024-07-03go当中的线程存储与使用
    1、settls从引导代码中可以看到,在执行settls前将m.tls放入了DI。go/src/runtime/asm_amd64.s:159TEXTruntime·rt0_go(SB),NOSPLIT|NOFRAME|TOPFRAME,$0....LEAQruntime·m0+m_tls(SB),DICALLruntime·settls(SB)....tls定义是无符号整形指针ty
  • 2024-05-30指针与引用区别
     =====来自:https://www.cnblogs.com/honernan/p/12175899.html每日一问1:指针和引用的区别 指针(pointer)和引用(references)都是对另一个变量的一种关联,即通过指针和引用可以使用另一个变量。而它们最大的区别在于:指针是一个变量,而引用不是。但在c++底层中,引用是通过
  • 2024-05-21再探虚函数
    虚函数是一种成员函数,其行为可以在派生类中被覆盖,支持动态调用派发。使用示例代码如下:extern"C"{//避免operator<<多次调用,简化汇编代码voidprintln(constchar*s){std::cout<<s<<std::endl;}}void*operatornew(size_tn){void*p=malloc(n);
  • 2024-04-07GO 语言编写的程序运行过程详解
    1.1go源代码packagemainfuncmain(){goadd(1,2)}funcadd(a,bint)(int,int,int){returna+b,a,b}1234567先来看看上面这段程序的反汇编代码:1.2add函数反汇编代码0x401050  48c744241800000000  MOVQ$0x0,0x18(SP)0x401059  48c744
  • 2024-02-01srs(state thread)如何实现协程切换
    417行的宏执行协程A上下文的保存419行_st_vp_schedule在RUNQ中找到一个待执行协程B,恢复协程B的上下文,切换到该协程B执行.协程B执行到io阻塞或者sleep事件,就会重新把协程B缓存起来,并寻找一个待执行协程(假设这里就AB两个协程),恢复协程A的上下文继续执行.完成协程切
  • 2023-11-30go的GPM - 协程的本质
    协程与线程线程在创建、切换、销毁时候,需要消耗CPU的资源。协程就是将一段程序的运行状态打包,可以在线程之间调度。减少CPU在操作线程的消耗进程用分配内存空间线程用来分配CPU时间协程用来精细利用线程协程的本质是一段包含了运行状态的程序后面介绍后,会对这个概念更好
  • 2023-07-11虚函数
    虚函数虚函数表示例//codeofvirtualfunction//filename:test.cpp#include<stdio.h>classA{public: virtual~A(){} voiddraw(){draw_imp();}protected: virtualvoiddraw_imp(){}};classB:publicA{public:protected: voiddraw_imp()overrid
  • 2023-06-05从源码分析 Go 语言使用 cgo 导致的线程增长
    TDengineGo连接器https://github.com/taosdata/driver-go使用cgo调用taos.so中的API,使用过程中发现线程数不断增长,本文从一个cgo调用开始解析Go源码,分析造成线程增长的原因。转换cgo代码对driver-go/wrapper/taosc.go进行转换gotoolcgotaosc.go执行后生成
  • 2023-03-13go mmap
    packagemainimport("fmt""os""syscall")funcF(a,buint64)uint64{r:=make([]uint64,1)cadd(r,9,8)returna+b+r[0]}funccalls(res[]ui
  • 2022-12-17利用Gdb探索GoRoutine的奥秘!
    主协程(runtime.main)的创建gdbmaininfofiles查看程序入口在程序入口打断点run单步调试查看下这两个参数ax=di,bx=si然后分配32字节的空间让sp对齐16
  • 2022-11-14Golang写时复制是否是原子性的?
    建议先阅读下Go汇编语言的入门教程​​​https://go.dev/doc/asm​​先说一下我这边的一个简化场景吧,有一个定时任务定时从数据库获取数据,也就是对应实例代码中的getNewPro
  • 2022-09-27Golang Plan9汇编研究——BP,SP和(SP)
    最近有时间研究下Golang的汇编,在开始之前,最好能了解下X86的汇编。Go汇编使用的是Plan9汇编,网上有很多资料可以查看,不过这篇我打算从自己亲手调试过的代码开始记录。Go使用
  • 2022-08-30从汇编看C++类的内存Layout(3)
    本文主要从汇编的角度,看C++类的内存模型,即C++类的各种数据是如何分布的。1.假设有如下Cpp文件:classMemoryLayout.cppclassBase{public:Base(){}