第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

有沒有辦法直接將gorang字符串復(fù)制到預(yù)分配的C字符緩沖區(qū)

有沒有辦法直接將gorang字符串復(fù)制到預(yù)分配的C字符緩沖區(qū)

Go
長(zhǎng)風(fēng)秋雁 2022-10-04 17:18:46
我有一個(gè)變量(但組合大小有上限)需要傳遞給C的GoStrings數(shù)量,我想盡可能便宜地做到這一點(diǎn)。我將多次執(zhí)行此操作(因此可以考慮將重用的預(yù)分配緩沖區(qū)視為零成本)。我最初的方法是循環(huán)遍歷 GoStrings,將每個(gè) GoString 轉(zhuǎn)換為 CString 并將其推送到 C。for _, str := range mystrings {   cstr := C.CString(str)   defer C.free(unsafe.Pointer(cstr))   C.push_str(pushStrFn, cstr)}當(dāng)然,由于 以及 N 個(gè) CGo 調(diào)用,這正在執(zhí)行 N 堆分配 - 所有這些都不便宜。C.CString接下來是使用在開始時(shí)分配的時(shí)間在Go中構(gòu)建一個(gè)大字符串,然后在單個(gè)CGo調(diào)用中將其傳遞給C,并帶有一些長(zhǎng)度信息。這是一個(gè) CString 調(diào)用和一個(gè) CGo 調(diào)用 - 這是一個(gè)實(shí)質(zhì)性的改進(jìn)。strings.Builderbuilder.Reset()for _, str := range mystrings {   builder.WriteString(str)}C.push_strs(pushStrsFn, C.CString(builder.String()))但是這種方法仍在執(zhí)行不必要的復(fù)制!理想情況下,我想預(yù)先分配一大塊內(nèi)存,我可以將其傳遞給C,然后只需將字符串直接復(fù)制到C中,而無需使用大型GoString中介。我能夠提前預(yù)先分配一個(gè)大數(shù)組,并迭代GoStrings中的字符,一次復(fù)制一個(gè)。這避免了中間復(fù)制,但比專用的字符串復(fù)制函數(shù)(如構(gòu)建器的函數(shù))慢得多。cCharArray := C.malloc(C.size_t(MAX_SIZE) * C.size_t(unsafe.Sizeof(uintptr(0))))goCharArray := (*[1<<30 - 1]C.char)(cCharArray)for _, str := range mystrings {   for i, c := range str {      goCharArray[offset+i] = C.char(c)   }}C.push_charArray(pushCharArrayFn, (*C.char)(cCharArray))有沒有一種更快的方法來做到這一點(diǎn),我錯(cuò)過了?我是否可以以某種方式將 C 緩沖區(qū)饋送到 ,或者使用字符串復(fù)制函數(shù)直接提供給 C 緩沖區(qū)?strings.Builder
查看完整描述

2 回答

?
繁星淼淼

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊

你試過嗎,或者這個(gè)包裝器在它上面?https://github.com/chai2010/cgo/blob/master/char.go#L61 .如果這速度不快,您可以嘗試使用不安全將指向 Go 字符串的指針轉(zhuǎn)換為 CString 指針。C.strncpy



查看完整回答
反對(duì) 回復(fù) 2022-10-04
?
胡說叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

使用不安全的包從 C 分配的緩沖區(qū)中創(chuàng)建字節(jié)片。

然后,您可以直接復(fù)制到該切片中,也可以將其作為零長(zhǎng)度的復(fù)切片粘貼到字節(jié)中。緩沖并使用寫字符串。您必須小心不要超過原始容量,否則緩沖區(qū)會(huì)將數(shù)據(jù)復(fù)制到新的后備緩沖區(qū)。


查看完整回答
反對(duì) 回復(fù) 2022-10-04
  • 2 回答
  • 0 關(guān)注
  • 138 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)