#arrays #rust #ffi
#массивы #Ржавчина #ffi
Вопрос:
Я пишу разделяемую библиотеку в Rust, которая предоставит интерфейс, совместимый с C. Одна из функций принимает 2D-массив символов char **obj_ptr
, выполняет некоторые простые вычисления над массивом и возвращается вызывающему.
Поскольку эта функция будет вызываться очень часто, все операции должны выполняться быстро. Очевидный способ преобразования массива в представление фрагмента фрагмента потребует итерации по всем элементам. Существует ли быстрый / быстрый способ преобразования 2D-массива в безопасные объекты Rust вместо этого?
Я не смог найти ничего непосредственно по теме представления нетривиальных C-типов в Rust, поэтому любой материал в этом направлении также был бы очень полезен.
Редактировать: каждая строка в массиве имеет одинаковую длину, а размер массива определяется во время выполнения.
Комментарии:
1. что не так с amp;mut [amp;mut [T]] ? срезы имеют небезопасную функцию для создания.
2. @Stargateur Я понимаю, что это было бы дорогостоящим с точки зрения вычислений, скажем, у меня есть (10 ^ 9) элементов Xa, мне пришлось бы перебирать все 10 ^ 9 внешних элементов для построения внутренних срезов.
3. ну, вот почему 2D vector — это зло… вы также можете использовать непосредственно указатель C, что на данный момент не имеет большого значения. Кроме того, откуда вы знаете размер вашего вектора в C? если это классическое значение NULL и 0, то опять же причина вообще не использовать slice и использовать указатель «как в C».
4. Это неровный массив или все
char *
s указывают на массивы одинаковой длины? Если они имеют одинаковую длину, известна ли длина во время компиляции?5. @trentcl да, они имеют одинаковую длину, а размер массива определяется во время выполнения.