大端,小端,想明白了觉得很简单,没想明白总觉得有点绕。
总结一下:
首先,大端小端只是决定多字节数据在存储器中的高低顺序。小端就是低字节在低地址,大端就是高字节在低地址。
这句话很简单,但是简单如果理解不够的话,在实际应用中就很容易混淆一些概念。比如网络传输的时候有个网络字节序,这个很容易和大小端混淆,混淆的就是存储器的高低顺序和网络发送的先后顺序。(至少我混淆了一阵)
还有大端小端是由什么决定?
最终决定权在cpu,cpu是什么端,那么直接运行在cpu上的程序就应该用什么端,
不过操作系统也有大小端之分,不管下面cpu用的什么端,windows和linux都是小端,这样做的好处就是在操作系统上开发,不用考虑cpu到底是什么端,你只要知道操作系统的大小端就行了,操作系统会做转换,转成真正cpu用的格式。我是这样理解的。
编译器和大小端是没有任何关系的(这里编译器包括其他的工具链),我理解,操作系统下使用的编译给自己运行的编译器我觉得本身就是针对这个操作系统的,他的处理肯定就是按照操作系统来的,那么如果是交叉编译,而且是编译给没有操作系统的程序,比如arm的ads和msp430的iar,arm支持大端或者小端,所以在ads中有编译选项,我想他是根据编译选项决定大小端的,而430只是小端,所以iar430肯定编译出来的就是按照小端的来的。
算是总结记录。望看到错误的人请指教。
阅读(2097) | 评论(0) | 转发(0) |