diff options
author | Runxi Yu <me@runxiyu.org> | 2025-03-30 17:56:44 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-03-30 17:56:44 +0800 |
commit | 9f01408ea7bb68684ec709fe1dabafd20254e055 (patch) | |
tree | 3ebc780eb406f9d41b853cfb751ad811706c22a4 /unsafe.go | |
parent | Add basic tabs to repo index (diff) | |
download | forge-9f01408ea7bb68684ec709fe1dabafd20254e055.tar.gz forge-9f01408ea7bb68684ec709fe1dabafd20254e055.tar.zst forge-9f01408ea7bb68684ec709fe1dabafd20254e055.zip |
Avoid allocations by using unsafe strinng/bytes conversions
Diffstat (limited to 'unsafe.go')
-rw-r--r-- | unsafe.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/unsafe.go b/unsafe.go new file mode 100644 index 0000000..418a910 --- /dev/null +++ b/unsafe.go @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: BSD-2-Clause +// SPDX-FileCopyrightText: Copyright (c) 2025 Runxi Yu <https://runxiyu.org> + +package main + +import "unsafe" + +// stringToBytes converts a string to a byte slice without copying the string. +// Memory is borrowed from the string. +// The resulting byte slice must not be modified in any form. +func stringToBytes(s string) (bytes []byte) { + return unsafe.Slice(unsafe.StringData(s), len(s)) +} + +// bytesToString converts a byte slice to a string without copying the bytes. +// Memory is borrowed from the byte slice. +// The source byte slice must not be modified. +func bytesToString(b []byte) string { + return unsafe.String(&b[0], len(b)) +} |