refactor: prealloc slices with known sizes (#8892)
Often those are small slices and that cuts down the number of (small) allocations from 2~7 to 1. This is consistent too, always only gets 1.
Jorropo committed
Jun 24, 2022 at 22:19 UTC
6602dd704e9b9414de3828adea68b05ad5078c81
5 files changed
+20
-19
cmd/ipfs/daemon.go
+7
-6
@@ -704,22 +704,23 @@ func printSwarmAddrs(node *core.IpfsNode) {
704
return
705
}
706
707
- var lisAddrs []string
707
ifaceAddrs, err := node.PeerHost.Network().InterfaceListenAddresses()
708
if err != nil {
709
log.Errorf("failed to read listening addresses: %s", err)
710
}
712
- for _, addr := range ifaceAddrs {
713
- lisAddrs = append(lisAddrs, addr.String())
711
+ lisAddrs := make([]string, len(ifaceAddrs))
712
+ for i, addr := range ifaceAddrs {
713
+ lisAddrs[i] = addr.String()
714
}
715
sort.Strings(lisAddrs)
716
for _, addr := range lisAddrs {
717
fmt.Printf("Swarm listening on %s\n", addr)
718
}
719
720
- var addrs []string
721
- for _, addr := range node.PeerHost.Addrs() {
722
- addrs = append(addrs, addr.String())
720
+ nodePhostAddrs := node.PeerHost.Addrs()
721
+ addrs := make([]string, len(nodePhostAddrs))
722
+ for i, addr := range nodePhostAddrs {
723
+ addrs[i] = addr.String()
724
}
725
sort.Strings(addrs)
726
for _, addr := range addrs {
core/commands/sysdiag.go
+3
-3
@@ -134,9 +134,9 @@ func netInfo(online bool, out map[string]interface{}) error {
134
return err
135
}
136
137
- var straddrs []string
138
- for _, a := range addrs {
139
- straddrs = append(straddrs, a.String())
137
+ straddrs := make([]string, len(addrs))
138
+ for i, a := range addrs {
139
+ straddrs[i] = a.String()
140
}
141
142
n["interface_addresses"] = straddrs
core/node/libp2p/addrs.go
+3
-3
@@ -100,13 +100,13 @@ func AddrsFactory(announce []string, appendAnnouce []string, noAnnounce []string
100
}
101
102
func listenAddresses(addresses []string) ([]ma.Multiaddr, error) {
103
- var listen []ma.Multiaddr
104
- for _, addr := range addresses {
103
+ listen := make([]ma.Multiaddr, len(addresses))
104
+ for i, addr := range addresses {
105
maddr, err := ma.NewMultiaddr(addr)
106
if err != nil {
107
return nil, fmt.Errorf("failure to parse config.Addresses.Swarm: %s", addresses)
108
}
109
- listen = append(listen, maddr)
109
+ listen[i] = maddr
110
}
111
112
return listen, nil
fuse/ipns/ipns_unix.go
+4
-4
@@ -216,7 +216,7 @@ func (r *Root) Forget() {
216
func (r *Root) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
217
log.Debug("Root ReadDirAll")
218
219
- var listing []fuse.Dirent
219
+ listing := make([]fuse.Dirent, 0, len(r.Keys)*2)
220
for alias, k := range r.Keys {
221
ent := fuse.Dirent{
222
Name: k.ID().Pretty(),
@@ -291,12 +291,12 @@ func (s *Directory) Lookup(ctx context.Context, name string) (fs.Node, error) {
291
292
// ReadDirAll reads the link structure as directory entries
293
func (dir *Directory) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
294
- var entries []fuse.Dirent
294
listing, err := dir.dir.List(ctx)
295
if err != nil {
296
return nil, err
297
}
299
- for _, entry := range listing {
298
+ entries := make([]fuse.Dirent, len(listing))
299
+ for i, entry := range listing {
300
dirent := fuse.Dirent{Name: entry.Name}
301
302
switch mfs.NodeType(entry.Type) {
@@ -306,7 +306,7 @@ func (dir *Directory) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
306
dirent.Type = fuse.DT_File
307
}
308
309
- entries = append(entries, dirent)
309
+ entries[i] = dirent
310
}
311
312
if len(entries) > 0 {
profile/profile.go
+3
-3
@@ -125,13 +125,13 @@ func (p *profiler) runProfile(ctx context.Context) error {
125
ctx, cancelFn := context.WithCancel(ctx)
126
defer cancelFn()
127
128
- var collectorsToRun []collector
129
- for _, name := range p.opts.Collectors {
128
+ collectorsToRun := make([]collector, len(p.opts.Collectors))
129
+ for i, name := range p.opts.Collectors {
130
c, ok := collectors[name]
131
if !ok {
132
return fmt.Errorf("unknown collector '%s'", name)
133
}
134
- collectorsToRun = append(collectorsToRun, c)
134
+ collectorsToRun[i] = c
135
}
136
137
results := make(chan profileResult, len(p.opts.Collectors))