关注
func replaceSpace( s string ) string { var str strings.Builder for i := 0 ; i < len(s) ; i ++ { if s[i] != ' ' { str.WriteString(s[i:i+1]) //一个字符一个字符地拼接 } else { str.WriteString("%20") //遇到空格时拼接"%20" } } return str.String() } 字符串在 Go 语言中是不可变类型,占用内存大小是固定的,当使用 + 拼接 2 个字符串时,生成一个新的字符串,那么就需要开辟一段新的空间,新空间的大小是原来两个字符串的大小之和。拼接第三个字符串时,再开辟一段新空间,新空间大小是三个字符串大小之和,以此类推。假设一个字符串大小为 10 byte,拼接 1w 次,需要申请的内存大小为: 10 + 2 * 10 + 3 * 10 + ... + 10000 * 10 byte = 500 MB 而 strings.Builder,bytes.Buffer,包括切片 []byte 的内存是以倍数申请的。例如,初始大小为 0,当第一次写入大小为 10 byte 的字符串时,则会申请大小为 16 byte 的内存(恰好大于 10 byte 的 2 的指数),第二次写入 10 byte 时,内存不够,则申请 32 byte 的内存,第三次写入内存足够,则不申请新的,以此类推。
点赞
相关推荐
查看22道真题和解析 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你的秋招白月光和意难平公司 #
24861次浏览 212人参与
# 机械人晒出你的简历 #
140458次浏览 865人参与
# 你想跟着什么样领导? #
16683次浏览 154人参与
# 比亚迪求职进展汇总 #
816164次浏览 3142人参与
# 十一月总结 #
29067次浏览 262人参与
# 深信服求职进展汇总 #
238869次浏览 1803人参与
# 职场上哪些事情令人讨厌 #
28683次浏览 117人参与
# 如果今天是你的last day,你会怎么度过? #
54847次浏览 311人参与
# 机械人还在等华为开奖吗? #
283644次浏览 1447人参与
# 什么样的背景能拿SSP? #
121277次浏览 421人参与
# 从夯到拉,评价编程语言 #
13497次浏览 107人参与
# 硬件人秋招进展 #
252103次浏览 3941人参与
# 分享一个让你热爱工作的瞬间 #
49868次浏览 431人参与
# 如何提高实习转正率? #
58974次浏览 414人参与
# 考研失败就一定是坏事吗? #
154227次浏览 1091人参与
# 巨人网络工作体验 #
69716次浏览 499人参与
# 应届生进小公司有什么影响吗 #
102811次浏览 1091人参与
# 找实习是选平台还是选业务? #
17758次浏览 196人参与
# 听到哪句话代表面试稳了OR挂了? #
107176次浏览 472人参与
# 入职以后才知道的校招谎言 #
106419次浏览 664人参与