暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

在小端序系统中,Oracle字节序存储规律是什么?

Oracle底层存储有时是2 byte倒序存储,有时是4 byte倒序存储,有什么规律,程序如何识别?
查阅了很多资料对于该问题的解释都比较模糊,不便于我们深入研究和分析,在此以我个人的理解对该问题解释如下,
Oracle数据库是由C语言编写的数据库管理系统,结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据,我们使用C语言结构体语法对kcbh结构定义如下,
typedef struct _kcbh
{
unsigned char type_kcbh;
unsigned char frmt_kcbh;
unsigned char spare1_kcbh;
unsigned char spare2_kcbh;
unsigned char rdba_kcbh[4];
unsigned char bas_kcbh[4];
unsigned char wrp_kcbh[2];
unsigned char seq_kcbh;
unsigned char flg_kcbh;
unsigned char chkval_kcbh[2];
unsigned char spare3_kcbh[2];
unsigned char tail_kcbh[4];
} kcbh;
在存储rdba_kcbh值时,后台实际操作是存储unsigned kcbh. rdba_kcbh[4],因此是以4 bytes倒序存储,在存储chkval_kcbh值时,后台实际操作是存储unsigned kcbh. chkval_kcbh[2],因此是以2 bytes倒序存储。
问题答案:在小端序系统中,Oracle的信息存储是以结构体中元素的大小为单元进行倒序存储。
以上两个问题是Oracle结构研究过程中经常会碰到的两个容易混淆的问题,深入理解以上两个知识点是我们后序学习和研究的基础。

《百度百科》字节序解释如下,
字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序。
1. Little endian:将低序字节存储在起始地址
2. Big endian:将高序字节存储在起始地址
LE little-endian
最符合人的思维的字节序,地址低位存储值的低位,地址高位存储值的高位
怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说低位值小,就应该放在内存地址小的地方,也即内存地址低位
反之,高位值就应该放在内存地址大的地方,也即内存地址高位
BE big-endian
最直观的字节序,地址低位存储值的高位,地址高位存储值的低位。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论