Last active
June 18, 2016 09:43
-
-
Save sergey-shambir/e0cf010381066c78513757a805902fef to your computer and use it in GitHub Desktop.
Для Андрея
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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