当前位置: 首页 > 面试题库 >

Go如何在拨打电话或拨打新电话时分配内存?

芮星海
2023-03-14
问题内容

当我用make或new调用创建新的slice或struct时:

s := make([]int64, 10, 100)
o := new(MyStruct)

Go通过内存分配系统调用分配多少内存?它是否预分配了内存,以便后续调用不会触发新的系统调用?

我问这个问题是因为我需要在代码中频繁分配内存。我不确定是否需要自己实现一个内存分配器,还是可以依靠Go来完成肮脏的工作。如果Go确实预分配了内存,我可以自定义要分配的块大小吗?

我在Go中编写了一些实验代码,并在strace下运行该代码,但我不了解Go对mmap系统调用的作用:

mmap(0xc000000000, 65536, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc000000000
munmap(0xc000000000, 65536)             = 0
mmap(NULL, 262144, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efdd1017000
mmap(0xc208000000, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc208000000
mmap(0xc207ff0000, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc207ff0000
mmap(0xc000000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xc000000000
mmap(NULL, 65536, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efdd1007000
mmap(NULL, 1439992, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7efdd0ea7000

问题答案:

您可能在这里遭受“过早优化”综合症。语言规范 没有 说明将如何精确分配分配的内存make()

例如,一个合格的Go实现可能会对功能进行彻底的分析,make([]foo, ...)并证明:

  1. 返回的切片值不会转义函数的范围。
  2. append() 未在此分片值上调用。
  3. 切片值,它没有传递给任何调用的函数。

在这种情况下,可以在堆栈上直接分配片的后备存储

当然,我正在汇总,但再次说明,此语言的语义未在语言规范中声明。目前,有两种成熟的Go实施(一种起源于Google,被称为gcgccgo),还有更多的实现(llvmgo似乎有很多机会实现),而且它们都有其独特之处。

因此,请考虑pprof总体上阅读和Go分析,并进行个人资料示例(但实际)代码。

在邮件列表中搜索单词“ profile”,“
profiling”,“ heap AND profile”,“ CPU AND profile”和“ pprof”将为您提供很多见解。

也考虑这个和这个。



 类似资料:
  • 拨打电话     拨打电话给 Skype 联系人。开始通话前,需先让支援PSP™版 Skype 的音频输入设备连接PSP™主机。 从联系人名单选择拨打对象 1. 进入 Skype 的选单画面后选择(联系人)。 2. 从联系人名单中选择电话的拨打对象。 可拨打电话给登入状态为(在线)等可通话状态的联系人。 开始呼叫后,会显示对方的名字或 Skype 账号。对方回复后即可开始通话。 提示 透过 Sky

  • 问题内容: 我正在尝试拨打的电话不是使用特定号码,而是使用在变量中被调用的号码,或者至少告诉它在您的电话中提取该号码。这个在变量中被调用的数字是我使用解析器或从网站sql检索到的数字。我做了一个按钮,试图用一个函数调用存储在变量中的电话号码,但无济于事。一切都会帮助谢谢! 问题答案: 试一试: 假设电话号码在。 的返回Optional,因此使用可以确保它是(而不是)返回的。 对于Swift 3:

  • 拨打普通电话(SkypeOut)     使用  Skype ,对传统的电话回线拨打电话。若要使用此机能,需先购买 Skype 点数。 1. 进入  Skype 的选单画面后,选择(拨号)。 2. 选择[国家或地区],从清单中选择国家或地区。 3. 选择[电话号码]后,输入号码并选择[确定]。 4. 选择[通话]。 对方接听后,即可开始通话。 重要 无法使用  Skype 拨打紧急电话。

  • 接听由普通电话拨打的电话(SkypeIn)     可接听传统的电话回线拨打的电话。若要使用此机能,需先购买  Skype 点数,或使用信用卡购买  SkypeIn 号码。其次,开始通话前,需先让支援PSP™版 Skype 的音频输入设备连接PSP™主机。 1. 登入 Skype ,并将登入状态调整为[ 在线]。 登入状态为[ 脱机]等状态时,无法接听电话。 2. 铃声响起,并显示来电画面后,选择

  • 我在这里阅读了Twilio电话教程:https://www.fullstackpython.com/blog/make-phone-calls-python.html 与Twilio教程不同,Twilio教程确实会叫我的手机,但它只播放MP3或人工智能语音。我希望能够进行对话。有没有办法用Twilio API连接我电脑的麦克风并与自己的手机通话?我一直在网上搜索,却找不到办法。请帮忙。

  • 我正在使用下面的代码搜索带有查询参数的Tweets。这适用于Twitter V1 API,但不适用于V2,在广泛阅读了他们的API留档后,我感到困惑。 我的第一个问题是,V1和V2是否共享相同的身份验证?i、 e.假设我的endpointurl是正确的,我可以用这个代码调用V2吗?这导致了第二个问题,如果我可以用与V1相同的身份调用V2,那么正确的endpoint是什么?到目前为止,最显著的区别是