相关疑难解决方法(0)

二维数组的内存表示如何

在Java中,正如我们所知,二维数组是多维一维数组.这意味着那些一维数组在内存上不连续.

相反,在C中,二维数组实际上是一维数组,其大小为total_row*total_column.因为Go语言使用了C语言中的许多概念.所以我的问题是:Go中的二维数组的内存表示看起来像是C还是Java?

arrays go slice

7
推荐指数
1
解决办法
3627
查看次数

Golang:计算地图的内存占用(或字节长度)

我想将地图限制为最大X字节.似乎没有直接计算地图字节长度的方法.

"encoding/binary"package有一个很好的Size功能,但它只适用于切片或"固定值",而不适用于map.

我可以尝试从地图中获取所有键/值对,推断它们的类型(如果它是a map[string]interface{})并计算长度 - 但这既麻烦又可能不正确(因为这将排除地图的"内部"golang成本本身 - 管理元素指针等.

这样做的任何建议方式?最好是代码示例.

dictionary go

5
推荐指数
1
解决办法
4369
查看次数

golang地图预留了多少内存?

给定未指定初始空间的映射分配,例如:

foo := make(map[string]int)
Run Code Online (Sandbox Code Playgroud)

文件表明,这里的内存分配是依赖于实现.那么(怎么样)我可以告诉我的实现分配给这张地图的内存量是多少?

dictionary heap-memory go

5
推荐指数
2
解决办法
3207
查看次数

Golang中的字符串内存使用情况

我正在使用map [string] string优化代码,其中map的值仅为“ A”或“ B”。因此,我认为显然,map [string] bool更好,因为该地图可容纳约5000万个元素。

var a = "a"
var a2 = "Why This ultra long string take the same amount of space in memory as 'a'"
var b = true
var c map[string]string
var d map[string]bool

c["t"] = "A"
d["t"] = true

fmt.Printf("a: %T, %d\n", a, unsafe.Sizeof(a))
fmt.Printf("a2: %T, %d\n", a2, unsafe.Sizeof(a2))
fmt.Printf("b: %T, %d\n", b, unsafe.Sizeof(b))
fmt.Printf("c: %T, %d\n", c, unsafe.Sizeof(c))
fmt.Printf("d: %T, %d\n", d, unsafe.Sizeof(d))
fmt.Printf("c: %T, %d\n", c, …
Run Code Online (Sandbox Code Playgroud)

memory string size go

5
推荐指数
1
解决办法
1857
查看次数

GoLang-内存分配-[]字节与字符串

在下面的代码中:

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
Run Code Online (Sandbox Code Playgroud)

要确定从CloudFoundry接收JSON数据所需的数据类型,请测试上面的示例代码以了解[]bytevs 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个字节?

memory string size go

2
推荐指数
1
解决办法
402
查看次数

为映射键分配了多少内存?即 map[uint16]uint16 是每个键 2 个字节还是存储为 uint32/64 无论如何?

我想知道 uint8 或 uint16 Go 映射键是否将存储为 1/2 字节,或者它们将具有 uint32/64 内存分配,而不管指定较小的值?

memory dictionary go

1
推荐指数
1
解决办法
56
查看次数

为什么 Go 中的 bool 类型是 16 个字节长?

我正在阅读“A Tour of Go”教程,并对其中一个示例进行了一些修改,发现 Go 中 bool 的大小是 16 个字节?!我是否没有使用正确的函数来计算这个值,或者 bool 的大小确实是 16 个字节?

package main

import "fmt"
import "unsafe"

func do(i interface{}) {
    switch v := i.(type) {
    case int:
        fmt.Printf("Twice %v is %v\n", v, v*2)
    case string:
        fmt.Printf("%q is %v bytes long\n", v, len(v))
    default:
        fmt.Printf("I don't know about type %T, but it's length is: %v bytes!\n", v, unsafe.Sizeof(v))
    }
}

func main() {
    do(21)
    do("hello")
    do(false)
}
Run Code Online (Sandbox Code Playgroud)

输出:

Twice 21 is 42
"hello" is 5 bytes long …
Run Code Online (Sandbox Code Playgroud)

size boolean go

0
推荐指数
1
解决办法
4767
查看次数

标签 统计

go ×7

dictionary ×3

memory ×3

size ×3

string ×2

arrays ×1

boolean ×1

heap-memory ×1

slice ×1