在下面的代码中:
c := "fool"
d := []byte("fool")
fmt.Printf("c: %T, %d\n", c, unsafe.Sizeof(c)) // 16 bytes
fmt.Printf("d: %T, %d\n", d, unsafe.Sizeof(d)) // 24 bytes
为了确定从CloudFoundry接收JSON数据所需的数据类型,请测试上面的示例代码以了解[]byte
vs string
类型的内存分配。
string
类型变量的预期大小c
为1个字节x 4个ascii编码字母= 4个字节,但是大小显示为16个字节。
对于byte
类型变量d
,GO将字符串作为字符串文字嵌入到可执行程序中。它将在运行时使用该runtime.stringtoslicebyte
函数将字符串文字转换为字节片。就像是…[]byte{102, 111, 111, 108}
byte
类型变量的预期大小d
再次为1字节x 4 ascii值= 4字节,但是变量的大小d
显示为24字节,因为它是基础数组容量。
为什么两个变量的大小都不是4个字节?
Go中的slice和string都是类似结构的标头:
reflect.SliceHeader
:
type SliceHeader struct {
Data uintptr
Len int
Cap int
}
reflect.StringHeader
:
type StringHeader struct {
Data uintptr
Len int
}
报告unsafe.Sizeof()
的大小是这些标头的大小,不包括指向数组的大小:
Sizeof接受任何类型的表达式x并返回假设变量v的字节大小,就好像v是通过var v = x声明的一样。 该大小不包括x可能引用的任何内存。
例如,如果x是切片,则Sizeof返回切片描述符的大小,而不是该切片所引用的内存的大小。
要获得某个任意值的实际(“递归”)大小,请使用Go的内置测试和基准测试框架。有关详细信息,请参见[如何在Golang中获取变量的内存大小?]
有关字符串,请参阅Golang中的字符串内存使用情况 。string
值所需的完整内存可以这样计算:
var str string = "some string"
stringSize := len(str) + unsafe.Sizeof(str)
我读过很多关于创建字符串时内存分配的相互矛盾的文章。一些文章说new operator在堆中创建一个字符串,String literal在String Pool[heap]中创建,而一些文章说new operator在堆中创建一个对象,在String Pool中创建另一个对象。 为了分析这一点,我写了下面的程序,打印字符串字符数组和字符串对象的hashcode: 此程序打印以下输出: 从这个输出中
问:网络UDP和TCP的区别?HTTP使用哪种协议? 问:TCP三次握手过程TCP的ACK包为什么是随机开始 问:TCP四次挥手过程,哪一方会进入TIMEWAIT?如何解决TIMEWAIT过多 问:TCP滑动窗口的作用是什么 问:TCP三次握手 问:如果第三次超时具体表现是什么 问:数据库:MyISAM和InnoDB的区别 问:为什么要用B+树而不是B树#软件开发笔面经#
#字节跳动# Golang面试,共4轮面试 一面∶ Q:1.自我介绍 Q:2.你有后端开发的经验吗?主要用什么语言做开发? Q:3.那你了解Java的设计模式有哪些呢? Q:4.那你写个单例我看看。为什么这么写?为什么要用volatile和synchronized Q:5.计网的基础怎么样?说说tcp的四次挥手。close_wait是哪一方的状态? Q:6.了解mysql吗?说说事务? Q
问题内容: 我正在使用 map [string] string 优化代码,其中 map 的值仅为“ A”或“ B”。因此,我认为显然, map [string] bool 更好,因为该地图可容纳约5000万个元素。 结果是: 在测试时,我发现有些奇怪,为什么带有很长字符串的 a2 使用8个字节,就像 一个 只有一个字母一样? 问题答案: 不会递归地进入数据结构,它只是报告传递的值的“浅”大小。引用
我试图理解DirectByteBuffer如何在Linux上工作,并编写了以下在strace下运行的非常简单的程序: 实际上,我期望一些mmap或sys\u brk系统调用直接从操作系统分配内存,但实际上它只是设置请求页面的读写保护。我的意思是: 这似乎是分配直接缓冲区比分配堆缓冲区慢的原因,因为每次分配都需要系统调用。 如果我错了,请纠正我,但是堆缓冲区分配(如果发生在TLAB内部)相当于返回一
问题内容: 您能否详细说明Python中字节字符串和Unicode字符串之间的区别。我读过这个: 字节码只是将源代码转换为字节数组 这是否意味着Python具有自己的编码/编码格式?还是使用操作系统设置?我不明白 你能解释一下吗?谢谢! 问题答案: 没有python不使用自己的编码。它将使用它有权访问并指定的任何编码。中的字符代表一个unicode字符。但是,要表示256个以上的字符,单个unic