- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试使用起始索引非常大的 slice ,比如 mySlice
。与其始终将起始索引用作 mySlice[index - mySliceStartIndex]
,不如明确地减去起始索引,我很想简单地定义 slice ,这样我就可以在不使用 这样的算术的情况下使用它mySlice[索引]
。这可以在不为所有未使用的低索引分配内存的情况下完成吗?
执行此操作的简单方法是分配一个 slice ,然后对其进行重新 slice (例如 mySlice = mySlice[3*1024*1024*1024:4*1024*1024*1024]
)显然内存效率低下,因为底层数组不仅需要为整个范围分配,而且仍然分配。 甚至不起作用,因为之后以前位于索引 3*1024*1024*1024 的数据现在位于索引处0,而我的目标是将其保持在原始索引。
我能否以不分配低于 slice 开始位置的索引的方式分配 slice (或其底层数组),理想情况下甚至在初始时也不分配?
最佳答案
如果不实际/不/分配未使用的部分,这是不可能的。在 Go 中定义 slice 的方式是通过 reflect.SliceHeader
type SliceHeader struct {
Data uintptr
Len int
Cap int
}
它不包含起始索引字段。仅仅是对底层固定大小数组的引用。正是这个底层数组保存了您的实际数据。 slice 只是该数组的一个“窗口”,它始终从索引 0
开始。 0
可能位于基础数组中的任何位置。
例如,考虑 following code :
a := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
b := a[2:8]
c := a[8:]
d := b[2:4]
这会产生如下内存布局:
fixed array: [ 0 1 2 3 4 5 6 7 8 9 ] > [10]int at address 273785072
slice a : . . . . . . . . . . > SliceHeader{Data:273785072 Len:10 Cap:10}
slice b : . . . . . . > SliceHeader{Data:273785080 Len:6 Cap:8}
slice c : . . > SliceHeader{Data:273785104 Len:2 Cap:2}
slice d : . . > SliceHeader{Data:273785088 Len:2 Cap:6}
Data
的值只是固定数组中的地址偏移量,所有四个 slice 共享底层存储。
a =:= $273785072
b =:= $273785080 =:= $a + sizeof(int)*2 =:= $a + 8
c =:= $273785104 =:= $a + sizeof(int)*8 =:= $a + 32
d =:= $273785088 =:= $b + sizeof(int)*2 =:= $a + sizeof(int)*4 =:= $a + 16
无论您在什么索引处重新 slice 现有 slice ,新 slice 的索引总是从 0
到 len(s)
,因为底层的地址是固定的它指向的数组将它放在那里。
如果您的数据是从磁盘上的文件加载的,您可以有不同的选择:使用 syscall.Mmap
从所需的索引开始,通过 slice 提供对数据的访问。返回的 slice 现在是 0
的索引,它仅涵盖您指定的范围。
func mmap(fd *os.File, start, size int) ([]byte, error) {
_, err := fd.Seek(0, 0)
if err != nil {
return nil, err
}
return syscall.Mmap(int(fd.Fd()), start, size,
syscall.PROT_READ, syscall.MAP_SHARED)
}
别忘了调用syscall.Munmap
在返回的 slice 上,当您使用完它时。
关于go - Go 中具有大起始索引的 slice (的底层数组)可以有效地分配内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22296232/
我在尝试生成具有“价格”轴和“量”轴的图表时遇到问题,类似于 example given 中的图表。在 Highstock 网站上。它可以很好地显示成交量轴,但不能显示价格。 在尝试确定问题的原因时,
起始 - HTML
在我的 HTML 项目中,我试图提及 标签。但是,VS Code 将其解释为实际的 标签,它会导致奇怪的事情发生。有人有办法解决这个问题吗?预先感谢您! 最佳答案 使用<代替 . 顺便说一下,使
起始 - HTML
在我的 HTML 项目中,我试图提及 标签。但是,VS Code 将其解释为实际的 标签,它会导致奇怪的事情发生。有人有办法解决这个问题吗?预先感谢您! 最佳答案 使用<代替 . 顺便说一下,使
The allocation function attempts to allocate the requested amount of storage. If it is successful, i
这是我的Program.cs: public static void Main(string[] args) { var host = new WebHostBuilder()
我希望我的应用程序独立于操作系统。因此,我的 config.properties 和日志文件存储在资源文件夹中,我通过相对路径获取这些资源。这是我的项目结构。 这是我的 AppConfig 类: pu
(前言:这是我在 Stack Overflow 上提出的第一个与音频相关的问题,因此我会尽力用最好的措辞来表达。欢迎编辑。) 我正在创建一个允许用户循环播放音乐的应用程序。目前,我们的原型(proto
我有一个 Pandas DataFrame,我想将其用作 Scrapy Start URL,函数 get_links 打开一个到 DataFrame 的 xlsx,其中有一个我想在其上运行蜘蛛的 Co
我有几个大的 DTD 文件。我用过 trang将它们转换为 XSD 文件,这样我就可以轻松地从 JAXB 和其他实用程序中使用它。但是,生成的 XSD 文件的所有声明元素都位于顶层。这意味着任何元素都
是否有任何工具可以将文件从给定的起始偏移量复制到给定的(结束)偏移量。我还想通过运行 md5sum 确认该工具已正确复制指定的字节。像这样的东西 1) Copy source file star
所以,我有一个程序,我可以使用 Path2D 对象将形状添加到 JPanel,然后我可以单击并拖动它们。我想要做的是能够找到药物后形状的最终 X 和 Y 坐标。坐标必须是左上角坐标。有什么想法吗? /
我是一名优秀的程序员,十分优秀!