【问题标题】:Pointer and malloc in SwiftSwift 中的指针和 malloc
【发布时间】:2018-02-10 21:25:32
【问题描述】:

我正在尝试将this 转换为 swift。

内存分配逻辑面临的问题

Byte *p[10000];

p[allocatedMB] = malloc(1048576);
memset(p[allocatedMB], 0, 1048576);

如何用swift写这个?

【问题讨论】:

标签: swift pointers malloc alloc


【解决方案1】:

你可以使用 Swift 中的malloc,它返回一个“原始指针”:

var p: [UnsafeMutableRawPointer?] = Array(repeating: nil, count: 10000)
var allocatedMB = 0

p[allocatedMB] = malloc(1048576)
memset(p[allocatedMB], 0, 1048576)

或者,使用UnsafeMutablePointer 及其 allocateinitialize 方法:

var p: [UnsafeMutablePointer<UInt8>?] = Array(repeating: nil, count: 10000)
var allocatedMB = 0

p[allocatedMB] = UnsafeMutablePointer.allocate(capacity: 1048576)
p[allocatedMB]?.initialize(to: 0, count: 1048576)

【讨论】:

  • 谢谢马丁!您能否让我知道资源或示例以快速了解有关 UnsafeMutableRawPointer 的更多信息?
  • 我正在使用第一种方式(使用 malloc) - 在分配大约 600MB 后,调试器上出现“来自调试器的消息:由于内存问题而终止”消息。总可用内存为 1.96GB。
  • 在分配 1 个对象后,双向使用 userMemory 不会增加。我通过在循环中使用此代码 sn-p 反复分配内存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 2013-05-09
  • 1970-01-01
  • 2017-05-13
  • 2018-02-10
  • 2016-07-05
  • 2016-09-29
相关资源
最近更新 更多