登录
首页 >  Golang >  Go问答

在Go中如何表示字符串切片的内存?

来源:stackoverflow

时间:2024-02-07 16:48:23 431浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《在Go中如何表示字符串切片的内存?》就很适合你!本篇内容主要包括##content_title##,希望对大家的知识积累有所帮助,助力实战开发!

问题内容

我试图理解 go 如何表示内存中的字符串片段(它们没有彼此紧密对齐)。首先,看一下这个c代码

#include 

int main(int argc, char **argv) {
  char *x[3];
  x[0] = "hi";
  x[1] = "foo";
  x[2] = "bar";
  printf("%p\n", x[0]);
  printf("%p\n", x[1]);
  printf("%p\n", x[2]);
}

我的计算机上的输出:

0x1068d0fa0
0x1068d0fa3
0x1068d0fa7
0x1068d0fa0 -> h
0x1068d0fa1 -> i
0x1068d0fa2 -> '\0'
0x1068d0fa3 -> f
0x1068d0fa4 -> ... till the last character in x[2] they all have a byte difference

但是在 golang 中,我不清楚这是如何工作的,

package main

import (
    "fmt"
)

func main() {

    k := []string{"hi", "there", "how", "are", "you"}

    fmt.printf("\n%p", &k[0])
    fmt.printf("\n%p", &k[1])
    fmt.printf("\n%p", &k[2])
    fmt.printf("\n%p", &k[3])
    fmt.printf("\n%p", &k[4])
}

我的计算机上的输出:

0x430050
0x430060
0x430070
0x430080

它们都有10个字节的差异,go在内存中如何表示呢?


正确答案


实际上,有一个 16 字节差异(因为地址是十六进制的),这对应于 here 中描述的切片布局,即:

  • 数据指针(8字节)
  • 长度(int,4 字节)
  • 容量(int,4 字节)

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>