日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《Go程序设计语言》- 第13章:低级编程

發布時間:2023/12/2 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Go程序设计语言》- 第13章:低级编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

    • 前言
    • unsafe.Sizeof、Alignof和Offsetof
    • unsafe.Pointer
    • 示例:深度相等
    • 使用cgo調用C代碼
    • 關于安全的注意事項

前言

本專欄是筆者在學習《Go程序設計語言》這本書時,對每個章節認為較為重要(容易忘記👻)的知識點記錄的筆記,其中也會有少量的思考👀, 現整理成博客分享出來。

如果對專欄感興趣,跑過去看一眼,書中的每一章都有:《Go程序設計語言》筆記

??注意??:本專欄不是詳細的知識講解,只是碎片的知識條目,或可作為Go知識點查漏補缺的小工具~

  • 對于常見無法靜態檢測出來的錯誤:數組訪問越界、nil指針引用等,動態檢測確保這類操作發生時終止程序并給出錯誤信息;
  • 自動內存管理(垃圾回收)防止了釋放后使用的bug;
  • unsafe包可以像普通包一樣導入,但其實它是由編譯器實現的;提供了對語言內置特性的訪問功能;
  • unsafe.Sizeof、Alignof和Offsetof

  • Sizeof函數返回參數在內存中占用的字節數;
  • 當類型的值在內存中對齊時,計算機的加載和寫入會很高效;對齊指起始地址是本身大小的整數倍
  • 32位系統一個字占4字節,64位系統一個字占8字節;
  • Alignof返回參數的對齊方式,布爾和數值類型對齊到他們的長度(最大8字節),其它類型按對齊;
  • Offsetof輸入參數x和f,是成員關系,可以x.f訪問;函數返回f相對于x的偏移地址;
  • unsafe.Pointer

  • unsafe.Pointer可以存儲任何類型的指針;它是可比較的
  • 可轉換為uintptr類型,保存地址的值,這樣就可以做地址運算了;但是注意下一條的陷阱
  • 一些垃圾回收器會移動變量以減少內存碎片,被稱作移動的垃圾回收器
  • 當將unsafe.Pointer轉換為uintptr后,進行地址運算,對運算結果進行存取,或許是無意義的:垃圾回收器可能將變量移動過了;
  • goroutine的棧是可擴展的,擴展時也可能包含變量移動,所以不能認為變量地址在生存周期中不變
  • 示例:深度相等

    使用cgo調用C代碼

  • 一個Go程序或許需要調用C實現的驅動,此時cgo登場;
  • import "C"會促使go build工具調用cgo進行預處理;
  • 在import "C"之前,使用注釋來暴露C的接口,其注釋內容為C的語句,如#include<xxx.h>等;
  • 注釋中還可以使用#cgo指令來指定工具鏈的選項,如#cgo LDFLAGS: -L/usr/lib -lbz2添加了庫目錄/usr/lib和庫文件bz2;
  • 在Go代碼中訪問C的內容,使用C.x、C.func形式訪問,即通過cgo暴露的C代碼,均在C作用域內
  • 也可以反過來將Go代碼編譯為靜態庫、動態庫,然后通過C程序來加載和共享;具體參考官網;
  • 關于安全的注意事項

  • 大多數程序員永遠都不需要使用unsafe包;
  • 避免使用reflect和unsafe;

  • 如有錯誤 ? ,歡迎指正 ??~

    如有收獲 🍗,可以考慮點贊👍/評論💬/收藏??/關注👀,大家共同進步~


    總結

    以上是生活随笔為你收集整理的《Go程序设计语言》- 第13章:低级编程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。