cubefs

Форк
0
41 строка · 885.0 Байт
1
//go:build !noasm && !nounsafe && !gccgo && !appengine
2

3
/**
4
 * Reed-Solomon Coding over 8-bit values.
5
 *
6
 * Copyright 2023, Klaus Post
7
 */
8

9
package reedsolomon
10

11
import (
12
	"unsafe"
13
)
14

15
// AllocAligned allocates 'shards' slices, with 'each' bytes.
16
// Each slice will start on a 64 byte aligned boundary.
17
func AllocAligned(shards, each int) [][]byte {
18
	if false {
19
		res := make([][]byte, shards)
20
		for i := range res {
21
			res[i] = make([]byte, each)
22
		}
23
		return res
24
	}
25
	const (
26
		alignEach  = 64
27
		alignStart = 64
28
	)
29
	eachAligned := ((each + alignEach - 1) / alignEach) * alignEach
30
	total := make([]byte, eachAligned*shards+63)
31
	align := uint(uintptr(unsafe.Pointer(&total[0]))) & (alignStart - 1)
32
	if align > 0 {
33
		total = total[alignStart-align:]
34
	}
35
	res := make([][]byte, shards)
36
	for i := range res {
37
		res[i] = total[:each:eachAligned]
38
		total = total[eachAligned:]
39
	}
40
	return res
41
}
42

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.