VS中關於位元組大小的總結

2022-04-05 17:32:50 字數 687 閱讀 9271

說明:關於位元組對齊的問題,很多人給出的答案是通過設定#pragma pack (1)的方式進行操作。但是在不是很考慮空間占用或者不是傳送協議包等情況下,為了讓程式跑的更快,是不會進行該設定。

以下均以預設的位元組對齊方式

1、在結構體中,使用的位元組數對齊方式是尋找結構體中的關鍵字的最大占用位元組數(預設最小是4位元組)

比如:struct node ;

typedef (base::*func)();

那麼func只占用了四個位元組。也就是說只要class base定義在typedef (base::*func)();之前出現,那麼它將只是占用簡單的對應位元組數。

3、那麼如果將成員函式指標也放進結構體裡面,那會產生怎樣的情況呢

這裡宣告乙個類

class base;

typedef (base::*func)();

通過第二點的鏈結我們知道這裡的sizeof(func)的大小是16位元組

那麼如下例子

struct node {

int a;

func func;

double b;

sizeof(node)應該占用多少的空間呢? 答案是8+16+8 = 32位元組。既然結構體以最大的占用空間計算,那麼為什麼是32位元組而不是48位元組呢? 其實對齊方式正如我上面說的關鍵字(double),是c++定義的關鍵字。所以只占用了32位元組。

關於大小端序和位元組對齊的總結

在使用變數的時候,直接對變數進行操作,無需管是大端還是小端序,但是 以位元組為單位進行操作時就需要考慮 比如 int numports numports 1 這樣子numports的值就是1了 如果這樣 unsigned char s unsigned char numports,然後再對s進行操作...

關於位元組對齊的總結

1 使用預設的位元組對齊方式。規則1 各成員變數存放的起始位址相對於結構的起始位址的偏移量必須為該變數的型別所占用的位元組數的倍數。注 下面列出常用型別的對齊方式 vc6.0,32位系統 型別 對齊方式 變數存放的起始位址相對於結構的起始位址的偏移量 char 偏移量必須為sizeof char 即...

關於位元組流的總結

在以前的乙個專案中用到過 流 的操作,今天大致總結一下。與客戶方的資料傳輸其實可以分成幾個步驟 1.封裝報文 2.準備鏈結 包括換取ip,埠,協議,timeout http和https還需要請求的url 以及httphead 3.傳送報文 判斷是否要對所做的操作校驗 4.解析返回的報文資訊,根據資訊...