• 2024-06-22golang如何使用指针灵活操作内存?unsafe包原理解析
    Hi你好,我是k哥。一个大厂工作6年,还在继续搬砖的后端程序员。我们都知道,C/C++提供了强大的万能指针void*,任何类型的指针都可以和万能指针相互转换。并且指针还可以进行加减等算数操作。那么在Golang中,是否有类似的功能呢?答案是有的,这就是我们今天要探讨的unsafe包。本文将深入探
  • 2024-05-29Golang中的三种指针
    三种类型的指针:类型用途备注普通类型指针传递对象的地址,不能做指针运算uintptr作为一段内容的首地址,可以做指针运算,GC不把uintptr当指针,uintptr无法持有对象。uintptr类型的目标会被回收。unsafe.Pointer不能做指针运算,可以用做在不同数据类型指针间转
  • 2024-03-24Go数组的扩容规则
    Go数组的扩容规则Go数组的扩容规则技术要点先是双倍扩容,然后是一定的比例扩容,逐渐向1.25进行靠近在目前的实现里面,在小于256的时候会进行double,在大于256的时候,会根据一定的生长因子进行扩容,但是总体来说还是会逐渐的靠近到1.25funcgrowslice(et*_type,olds
  • 2023-12-03go 内存管理
    协程栈go栈的位置1.Go协程栈位于Go-堆内存上2.Go堆内存位于操作系统虚拟内存上go栈的工作流程以main.main为出发点要记录runtime.main的栈基地址记录a和b的局部变量值开辟一个空间记录sum函数的返回值记录b和a的值,这里是为了方便sum在执行时候,
  • 2023-09-09Go 中普通指针、unsafe.Pointer 与 uintptr 之间的关系和指针运算
    C语言指针运算指针运算就是对指针类型的变量做常规数学运算,例如加减操作,实现地址的偏移。指针运算在C语言中是原生支持的,可以直接在指针变量上做加减,例如:#include<stdio.h>constintMAX=3;intmain(){intvar[]={10,100,200};inti,*ptr;/*
  • 2023-06-25go 使用 unsafe 包
    go使用unsafe包进行指针操作go语言中没有直接提供指针操作,但是提供了unsafe包可以对指针进行转换// -ApointervalueofanytypecanbeconvertedtoaPointer.// -APointercanbeconvertedtoapointervalueofanytype.// -Auintptrcanbeconvertedt
  • 2023-06-12域账户设置后 公司桌面图标被限制 如何修改?
    packagemainimport( "fmt" "os" "syscall" "unsafe")const( SPI_SETDESKWALLPAPER=0x0014 SPIF_UPDATEINIFILE =0x0001 SPIF_SENDCHANGE   =0x0002)funcmain(){ //获取指定的图片文件路径 //args:=o
  • 2023-04-25go语言time.Timer
    go语言time.TimerTimer是一个一次性的定时器,经过指定的时间后将会触发一个时间,通知调用的goroutine使用方法funcmain(){ timer:=time.NewTimer(3*time.Second) for{ select{ caset:=<-timer.C: fmt.Println(t) return } }}数据结构Timer//The
  • 2023-03-22C++数组类型中存入结构体类型对象
    最近看Binder机制的时候看到一个unsigned类型数组中不仅可以存放unsignedint类型还可以存放结构体对象,感到十分惊奇,下面我们来看一下uintptr_t类型和指针类型的区别uin
  • 2023-03-16go dll 获取 当前 光标位置 win10
    packagewindllimport( "syscall" "unsafe")var( modUser32,_=syscall.LoadDLL("user32.dll") procGetKeyboardState,_=modUser32.FindProc(
  • 2023-02-24被注入的dll 获取进程的加载地址,并通过偏移修改游戏数据
    //dllmain.cpp:定义DLL应用程序的入口点。#include"pch.h"#include<stdio.h>#include<tchar.h>#include<exception>#include<wchar.h>#include<windows.h
  • 2023-02-04uintptr & unsafe.Pointer
    uintptr&unsafe.Pointerunsafe.Pointer从名字来看它是不安全的和指针相关,unsafer.pointer主要的功能就是不同类型指针间的转换。funcmain(){vara*int8var
  • 2022-12-07golang编译为dll与调用dll简单样例
    ==前置准备==1、golang版本:1.182、安装MinGW(我的环境本身已经安装好了,没有验证不安装是否可以生成) ==编译为DLL==【代码样例】packagemainimport"C"//export
  • 2022-11-30intptr_t和uintptr_t类型
    看代码看到intptr_t和uintptr_t类型,有些不明白,查找后总结如下参考http://www.cnblogs.com/Anker/p/3438480.html这2个类型定义如下/*Typesfor`void*'pointers.*/#
  • 2022-11-20Windows注册表的常用字段数据类型
    介绍一下windows注册表的数据类型,顺便提供C#访问REG_EXPAND_SZ类型的原始值(不使用环境变量值替换)的方法Windows注册表的字段类型常用主要有6种二进制(REG_BINARY)
  • 2022-11-18关于 uintptr_t和intptr_t 类型
    简介最近在看代码时,发现了两个之前没见过的数据类型:intptr_t,uintptr_t。这两个数据类型是ISOC99定义的,具体代码在linux平台的/usr/include/stdint.h头文件中。/*Types
  • 2022-10-18Golang 中的 字符串,切片,數組
    數組,字符串,切片字符串Golang中的string底層數據類型定義在runtime/string.go中:typestringStructstruct{ strunsafe.Pointer lenint}在反射包中與之對應
  • 2022-10-07Go进阶05:不安全指针unsafe.Pointer使
    前言在大家学习Go的时候,肯定都学过“Go的指针是不支持指针运算和转换”这个知识点.为什么呢?首先,Go是一门静态语言,所有的变量都必须为标量类型.不同的类型不能够
  • 2022-09-07引用计数的存储
    在64位中,引用计数可以直接存储在优化过的isa指针中,也可能存储在SideTable类中。在isa里面,有一个extra_rc参数其中:rc就是retainCount引用计数的意思。则has_sidetable_r