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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

c++服务器开发学习--02--MySQL,Redis,ASIO,iocp,TrinityCore代码结构,c++对象模型

發布時間:2025/3/21 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++服务器开发学习--02--MySQL,Redis,ASIO,iocp,TrinityCore代码结构,c++对象模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c++服務器開發學習--02--MySQL,Redis,ASIO,iocp,TrinityCore代碼結構,c++對象模型

  • MySQL
    • 問題
  • Redis
  • Asio
  • iocp
  • TrinityCore代碼結構
  • c++對象模型
    • 虛函數表(vtbl)、虛指針(vptr)
    • 對象模型
      • 非繼承
      • 單繼承
      • 多繼承
      • 虛繼承

MySQL

學習鏈接:MySQL教程|菜鳥教程,博主學的是基礎部分。

  • 數據庫操作:創建(CREATE),刪除(DROP)

  • 數據表操作:

    • 創建:CREATE

    • 刪除:DROP

    • 插入:INSERT INTO

    • 查詢:SELECT FROM…… WHERE……

    • 更新:UPDATE……SET……

    • 刪除數據表中的某些數據:DELETE FROM

    • 獲取指定記錄:LIKE

    • 排序:ORDER BY (ASC:升序;DESC:降序)

    • 分組:GROUP BY

    • 連接SELECT語句結果:UNION,UNION ALL(取重復值)

    • 多張數據表中取數據:




    問題

    UNION 和 INNER JOIN在用處上有什么區別?

    Redis

    學習鏈接:Redis教程|菜鳥教程,博主學的是基礎部分。

    Redis:Remote Dictionary Server

  • 數據類型:
    • String: 字符串
    • Hash: 散列
    • List: 列表
    • Set: 集合
    • Sorted Set: 有序集合
  • 命令,鍵:
    • 命令:redis-cli

    連接到本地的redis服務;

    連接到某個特定的redis服務;

    • 鍵命令的基本語法:
  • String命令

  • Hash命令

  • 是一個string類型的field(字段)和value的(值)映射表,存儲鍵值對;一個hash最多存儲232?12^{32}-1232?1個鍵值對。

  • List命令
  • 按插入順序排序,一個List最多存儲232?12^{32}-1232?1個元素。

  • Set命令
  • String 類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據。

    Redis 中集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。

    集合中最大的成員數為 232?12^{32} - 1232?1(4294967295, 每個集合可存儲40多億個成員)。

  • Sorted Set命令
  • 有序集合和集合一樣也是 string 類型元素的集合,且不允許重復的成員。

    不同的是每個元素都會關聯一個 double 類型的分數。redis 正是通過分數來為集合中的成員進行從小到大的排序。

    有序集合的成員是唯一的,但分數(score)卻可以重復。

    集合是通過哈希表實現的,所以添加,刪除,查找的復雜度都是 O(1)。 集合中最大的成員數為 232?12^{32} - 1232?1 (4294967295, 每個集合可存儲40多億個成員)。

    Asio

    學習鏈接:c++網絡編程之asio

  • ASIO 與c++標準庫:
  • c++20標準庫的網絡部分主要基于ASIO,ASIO主要只有socket和socket編程需要的定時器功能會進標準(標準也是循序漸進,第一個版本就只有這點,http之類的,可能會在后續版本加入),ASIO本身包含的文件、串口、unix域套接字等都會刪掉。進入C++20的功能大概只占ASIO的25%。

    iocp

    學習鏈接:完成端口教程

    TrinityCore代碼結構

    https://github.com/TrinityCore/TrinityCore

    c++對象模型

    學習鏈接:圖說C++對象模型

    對象模型研究的是對象在存儲上的空間與時間上的更優,并對C++面向對象技術加以支持,如以虛指針、虛表機制支持多態特性。

    虛函數表(vtbl)、虛指針(vptr)

    • 虛函數表:當一個類在實現的時候,如果存在一個或以上的虛函數時,那么這個類便會包含一張虛函數表。而當一個子類繼承并重載了基類的虛函數時,它也會有自己的一張虛函數表。

    • 虛函數調用與虛指針

    對于虛函數的調用是通過查虛函數表來進行的,每個虛函數在虛函數表中都存放著自己的一個地址,而如何在虛函數表中進行查找,則是通過虛指針來調用,在內存結構中它一般都會放在類最開始的地方。

    虛表指針(vptr)的位置為編譯器決定,傳統上它被放在所有顯示聲明的成員之后,不過現在許多編譯器把vptr放在一個類對象的最前端

    • 虛函數與普通函數的調用關系

    只要某一個類X包含虛函數,無論是它的父類或者它本身擁有,那么這個類的對象都會包含一個虛指針vptr,至于vptr要指向哪張表,取決于類X它本身是否含有虛函數。


    對象模型

    非繼承

    構造函數-析構函數-虛函數-nonstatic數據成員-static數據成員
    通過 (int*)(&p)取得虛函數表的地址;
    type_info信息的確存在于虛表的前一個位置。通過((int)(int*)(&p) - 1))取得type_infn信息,并成功獲得類的名稱的Base;
    虛函數表的第一個函數是析構函數;
    虛函數表的第二個函數是虛函數print(),取得地址后通過地址調用它(而非通過對象),驗證正確;
    虛表指針的下一個位置為nonstatic數據成員baseI;
    可以看到,static成員函數的地址段位與虛表指針、baseI的地址段位不同。

    單繼承

    • 在C++對象模型中,對于一般繼承(這個一般是相對于虛擬繼承而言),若子類重寫(overwrite)了父類的虛函數,則子類虛函數將覆蓋虛表中對應的父類虛函數(注意子類與父類擁有各自的一個虛函數表);若子類并無overwrite父類虛函數,而是聲明了自己新的虛函數,則該虛函數地址將擴充到虛函數表最后。

    • 而對于虛繼承,若子類overwrite父類虛函數,同樣地將覆蓋父類子物體中的虛函數表對應位置,而若子類聲明了自己新的虛函數,則編譯器將為子類增加一個新的虛表指針vptr

    多繼承

    • 多個父類一個子類

      • 在多繼承中,子類含有多個父類的子對象,子類的虛函數被放在聲明的第一個基類的虛函數表中。
      • 當子類overwrite了父類的函數,所有基類的print()函數都被子類的print()函數覆蓋。
      • 內存布局中,父類按照其聲明順序排列。
    • 一個父類被重復繼承 (菱形繼承)

    虛繼承

    虛繼承的子類,如果本身定義了新的虛函數,**則編譯器為其生成一個虛函數指針(vptr)以及一張虛函數表。**該vptr位于對象內存最前面。
    vs非虛繼承:直接擴展父類虛函數表。

    虛繼承的子類也單獨保留了父類的vptr與虛函數表。這部分內容接與子類內容以一個四字節的0來分界。

    虛繼承的子類對象中,含有四字節的虛表指針偏移值。

    總結

    以上是生活随笔為你收集整理的c++服务器开发学习--02--MySQL,Redis,ASIO,iocp,TrinityCore代码结构,c++对象模型的全部內容,希望文章能夠幫你解決所遇到的問題。

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