Skip to content

Instantly share code, notes, and snippets.

@sergey-shambir
Last active June 18, 2016 09:43
Show Gist options
  • Save sergey-shambir/e0cf010381066c78513757a805902fef to your computer and use it in GitHub Desktop.
Save sergey-shambir/e0cf010381066c78513757a805902fef to your computer and use it in GitHub Desktop.
Для Андрея
using String = char [];
using ArrayInt = int [];
// Операции над массивом char
- получение длины
- доступ чтение/запись к элементу строки (+ проверка границ, при выходе кидать панику (или abort))
- выделение памяти под локальный массив известной длины
// Первая модель: массив статически известного размера
- выделение памяти под локальный массив:
выделение - alloca
зануление - memset или цепочка вызовов store
- доступ на чтение/запись
выгрузить в регистр адрес ячейки массива с помощью инструкции "getelementptr inbounds"
записать в память через store %adress_registry
// Вторая модель: struct { int length, int *data }
- выделение памяти под массив неизвестного размера
функция append(array, elem)
при вызове создаёт новый массив, в хвост которого добавлен элемент
- доступ на чтение/запись
получить длину массива (для проверок в "getelementptr inbounds")
выгрузить в регистр адрес ячейки массива с помощью инструкции "getelementptr inbounds"
записать в память через store %adress_registry
//////////////////////////////
func reverse(argv String) {
arrLen := len(argv)
for i := 0; i < arrLen / 2; i++ {
firstVal := argv[i]
argv[i] = argv[arrLen - i]
argv[arrLen - i] = firstVal
}
}
func fill_array() {
var arr [5]int
arr[0] = 3
arr[3] = 1
arr[4] = 2
arrLen := len(arr)
for i := 0; i < arrLen / 2; i++ {
firstVal := arr[i]
arr[i] = arr[arrLen - i]
arr[arrLen - i] = firstVal
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment