大小端理解

一、背景

这块知识点算是比较常见,我们传送网络二进制自定义协议一定会遇到的,我最近看到一个问题,于是我思考为什么会有大小端的问题,他到底是哪一层导致的。基本知识我这里就不说了,自己搜索一下就能知道

二、思考

我们看的书籍或者网络的文章都说大小端跟CPU有关系,但跟高级语言没有关系,我们用c/c++,c#的时候我们赋值给变量根本不关心大小端,比喻 short i = 0x1234 我们根本不用关心他在内存里面是大端还是小端,因为他的值就是0x1234。不用关心他的内存形式。

另外一个知识点,i = a + b; 如果a 和 b 如果在别的线程可能被修改,那么这样行代码是非线程安全的,那为什么会线程不安全, 因为 i = a + b 在汇编层是多行代码,并不是一行代码,所以高级语言的线程安全,不能只看高级语言层线程安全,单行操作代码也可能是非线程安全的。【这里举例不是非常好,如果以后能想到更合适才写吧】

我们知道cpu 没有变量概念,只认识0 和 1 ,高级语言不关心内存的形态,那么可以断定大小端只是汇编层问题,我们知道汇编 命令 + 操作数, 那么32 位中 操作可以word 也可以是dword ,汇编是跟cpu最直接的,所以厂商不一样,操作数在内存形式不一样,所以才出现大小端的问题。所以问题是在汇编层导致。

三、补充

自己google了一下也没有找到任何英文文档来证明我上概念。