LINUX.ORG.RU

Конвертация Go-строк в C-строки.

 ,


0

2

У них есть функция func C.CString(string) *C.char которая это делает. Но она новую память выделяет, строку туда копирует и заставляет меня её освобождать. А почему нельзя просто попросить у Go-строки указатель на её байты и её размер и так юзать, если я не собираюсь её изменять?

Я конечно понимаю, что они не дают запомнить указатель на их данные, ибо GC может её переместить. Но я, допустим, не хочу запоминать - а хочу в вызове C-кода один раз на неё посмотреть и всё.

Ведь не прервёт меня Go-шедулер посередине исполнения моего C-кода и не запустит свой Gc, там ведь невытесняющие сопрограммы, которые переключаются только когда наступают всякие краеугольные события в их жизни, а внутри моего С-кода таких событий наступить не может физически.

Update. Ой, всё. На самом деле я хочу []byte пробросить в C++, а это реально тупо через unsafe.Pointer(&arr[0])... Но вопрос про шедулер и прерывание моего C++ кода всё равно интересен.



Последнее исправление: hlamotron (всего исправлений: 1)

С 1.4 гц конкурентный — если на го-стороне не осталось ссылок, ничто тебя не спасет.

Deleted
()
Ответ на: комментарий от hlamotron

Оп это ты. А мне пора очки заказывать, опов с неопами путаю :D

arturpub ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.