首页 > TAG信息列表 > uintptr

关于 uintptr_t和intptr_t 类型

简介 最近在看代码时,发现了两个之前没见过的数据类型:intptr_t,uintptr_t。这两个数据类型是ISO C99定义的,具体代码在linux平台的/usr/include/stdint.h头文件中。 /* Types for `void *' pointers. */ #if __WORDSIZE == 64 # ifndef __intptr_t_defined typedef long int intptr

enter_supervisor_mode

    204 void enter_supervisor_mode(void (*fn)(uintptr_t), uintptr_t arg0, uintptr_t arg1) 205 { 206 uintptr_t mstatus = read_csr(mstatus); 207 mstatus = INSERT_FIELD(mstatus, MSTATUS_MPP, PRV_S); 208 mstatus = INSERT_FIELD(mstatus

Go map初始化和读取

数据结构 type hmap struct { count int //键值对的个数 flags uint8 //状态值 B uint8 //桶的幂数,桶的数量为2^B noverflow uint16 //溢出桶的数量 hash0 uint32 // hash seed 哈希种子 buckets unsafe.Pointer // 哈希表数组,底层为[]bma

深度解密Go语言之unsafe

文章目录 指针类型什么是unsafe为什么有unsafeunsafe实现原理unsafe如何使用总结参考资料 指针类型 在正式介绍 unsafe 包之前,需要着重介绍 Go 语言中的指针类型。 我本科开始学编程的时候,第一门语言就是 C。之后又陆续学过 C++,Java,Python,这些语言都挺强大的,但是没了 C

Go入门笔记34-Go 使用Ioctl

Go获取控制台宽度 1、代码 package main import ( "fmt" "runtime" "syscall" "unsafe" ) const ( TIOCGWINSZ = 0x5413 TIOCGWINSZ_OSX = 1074295912 ) type window struct { Row uint16 Col uint16 Xpixel uint16 Ypi

iOS进阶笔记(三) Objc关键字

golang的reflect

目录1. 什么是反射?2. interface:多态魔法2.1. 接口在go中的应用2.2. 特定类型的接口3. 反射:类型的潘多拉魔盒3.1. reflect.Type接口3.2. reflect.Value结构类型3.3. 地址转换技术4. reflect包的应用4.1. example4.2. dump数据结构地址4.3. 地址操作:斗转星移4.4. 猴子补丁:暗渡陈仓5.

Go 语言源码分析——map

哈希表用于存储键值对的映射关系,具有O(1)的读写性能。通过哈希函数可以将不同的键映射到不同索引上,当不同的键映射到同一个索引上时,会产生哈希冲突,可通过开放寻址法、链表法来解决哈希冲突,其中Go使用的是链表法。 一、数据结构  map将键值对存放在桶数组中,每个桶只保存8个键

2021-06-12

iOS 底层原理之alloc 探究(三)对象本质与神秘的isa 一,准备工作 1.了解Clang编译器 Clang是⼀个C、C++、Objective-C语⾔的轻量级编译器。源代码发布于BSD协议下。 Clang是⼀个C++编写由Apple主导,基于LLVM的C/C++/Objective-C编译器2013年4⽉, Clang已经全⾯⽀持C++11标准,并开始

golang之反射

依赖的包为reflect。 Kind():返回最基础的类型。 type Kind uint const ( Invalid Kind = iota Bool Int Int8 Int16 Int32 Int64 Uint Uint8 Uint16 Uint32 Uint64 Uintptr Float32 Float64 Complex64 Complex128 Array Chan Func Interface Map Ptr S

从Jvm源码出发看zgc的技术源码分析,Jvm 垃圾回收

笔者经过上次对zgc在不同环境下进行的测试后,发现zgc所带来的提升非常之大。一时间对zgc在生产中使用充满信心,但是在全面使用之前,难免对其几大新特性有一些好奇,比如:染色指针,读屏障,动态region,支持NUMA等等。其中有一些是比较好理解的,但是有一些例如染色指针,读屏障刚接触的时候会不明

Golang unsafe.Pointer指针

相较于 C 而言,Go 语言在设计时为了使用安全给指针在类型和运算上增加了限制,这让Go程序员既可以享受指针带来的便利,又避免了指针的危险性。除了常规的指针外,Go 语言在 unsafe 包里其实还通过 unsafe.Pointer 提供了通用指针,通过这个通用指针以及 unsafe 包的其他几个功能又让

Go 指针

普通指针:*T 对于任意类型 T,它所对应的指针类型就是 *T var i int var ip *int var s string var sp *string Go 是强类型,不同类型对应的 *T 不可相互转换、不可相互赋值、不可做比较、普通指针不可参与计算。 万能指针:unsafe.Pointer unsafe.Pointer 与 *T 的关系,就好比 in

C语言内存对齐

#include <stdio.h> #include <stdlib.h> typedef unsigned char u_char; #define NGX_ALIGNMENT sizeof(unsigned long) /* platform word */ #define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1)) /* Integer multiple alignment */ #define

「类与对象」说一说isa指针

概要 在讲isa指针前,我们先来看一道经典的面试题: 对象的isa指针指向哪里? 看到这道题,心中可能朦朦胧胧有些答案,也可能不太确定,抑或说不明白。那咱就带着这个问题,揭开isa指针的神秘面纱。 这篇文章主要就isa的作用、数据结构以及如何优化等方面进行讲解。 isa的作用 在文章NSOb

汇编层探索与讨论c++引用

文章目录 提出问题下面提到词汇前提声明第一组:第二组:第三组:第四组:第五组:结论:第七组:第八组:第九组: 引用比指针安全????常量引用 提出问题 定义一个引用类型和将一个变量转换成引用类型一样吗? 引用比指针安全,真的是这样吗?对引用不理解的话比指针还危险。 为什么要用常量引用传参

Go 学习笔记(74)— Go 标准库之 unsafe

Go 语言自带的 unsafe 包的高级用法, 顾名思义,unsafe 是不安全的。Go 将其定义为这个包名,也是为了让我们尽可能地不使用它。不过虽然不安全,它也有优势,那就是可以绕过 Go 的内存安全机制,直接对内存进行读写。所以有时候出于性能需要,还是会冒险使用它来对内存进行操作。 1. 指

go语言学习

3 基本数据 go的数据类型分为四大类:基础类型、聚合类型、引用类型和接口类型 3.1 整数 1.go同时具有符号整数和无符号整数。分别为int8,int16,int32,int64;uint8,uint16,uint32,uint64 2.此外还有两种类型int和uint 3.rune是int32类型的同义词,常常用于指明一个值是Unicode码点;byte

异或运算

const MaxUintptr = ^uintptr(0) // MaxUint64 = 1<<64 - 1 有必要对比一下 math 包下的常量声明,这两个值大小相等 首先需要解释 ^ 的符号含义,表示按位异或。但按位异或操作的是两个数,这里 Go 的写法显然不是。符号代表什么含义呢?答案是 Go 没有专门的一元取反运算符,取而代

OC之runtime(共用体)

在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的地址 从arm64架构开始,对isa进行了优化,变成了一个共用体(union)结构,还使用位域来 存储更多信息,在apple源码objc中找到isa的结构源码大抵如下: # if __arm64__ # define ISA_MASK 0x0000000ffffffff8UL

go基础之map-增和改(二)

go基础之map-增和改(二) 写在之前环境说明makemap_small和makemap的区别添加元素(没触发扩容的情况)一直到在发生扩容前的map内存结构是怎样的呢发生扩容总结 写在之前 在上篇文章《go基础之map-写在前面(一)》介绍了map的数据结构,本篇会详细介绍map的增和改的代码实现,由于增

共享内存原理与VCS监控采集实战

作者:cluo 一、前言 共享内存广泛用于Redis,Kafka,RabbitMQ 等高性能组件中,本文主要提供一个共享内存在广告埋点数据采集的实战场景。 二、共享内存原理 1、原理 在Linux中,每个进程都有属于自己的进程控制块(PCB)和地址空间(Addr Space),并且都有一个与之对应的页表,负责将进程的虚拟地址

Go map的实现(三)map 的数据访问

本文在golang map 数据结构的基础上,学习map 数据是如何访问的。 map 创建示例 在golang 中,访问 map 的方式有两种,例子如下: val := example1Map[key1] val, ok := example1Map[key1] 第一种方式不判断是否存在key值,直接返回val (可能是空值) 第二种方式会返回一个bool 值,判断是否存

001、GO之指针转换

01、Pointer类型   unsafe包下,有定义type Pointer *ArbitraryType(任意类型指针),可绕过GO的类型限制,type ArbitraryType int 任何类型的指针值都可以转换为Pointer。 Pointer可以转换为任何类型的指针值。 uintptr可以转换为Pointer。 Pointer可以转换为uintptr。 02、使用示例

Go-unsafe详解

        指针类型 在正式介绍 unsafe 包之前,需要着重介绍 Go 语言中的指针类型。 我本科开始学编程的时候,第一门语言就是 C。之后又陆续学过 C++,Java,Python,这些语言都挺强大的,但是没了 C 语言那么“单纯”。直到我开始接触 Go 语言,又找到了那种感觉。Go 语言的作者之一 Ken T