首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >mmap高字节优先与低字节优先

mmap高字节优先与低字节优先
EN

Stack Overflow用户
提问于 2009-06-21 22:48:36
回答 2查看 2K关注 0票数 2

如果我使用mmap来写uint32_t,我会遇到大端/小端约定的问题吗?特别是,如果我在大端机器上写一些数据mmap'ed,当我试图在小端机器上读取数据时,我会遇到问题吗?

EN

回答 2

Stack Overflow用户

发布于 2009-06-21 23:20:43

如果你正在使用mmap,你可能会关心速度和效率。你基本上有几个选择。

  1. 使用htonl,htons,ntohl,ntohs函数包装所有的读写操作。在Windows上调用htonl (主机到网络)命令会将数据从小端转换为大端。在其他架构上,这将是一个空白。这些转换确实有开销,但根据您的操作,它们可能很重要,也可能不重要。AFAIK,这是SQLite
  2. 使用的方法。您的另一个选择是始终以主机格式写入数据,并在用户需要跨平台迁移数据时提供例程。数据库通常以主机格式读取和写入数据,但提供像bcp这样的工具,它将写入ASCII或网络字节顺序。
  3. 你可以用一个字节顺序标记你的文件头。当你的程序启动时,它会将它的字节顺序与文件的字节顺序进行比较,并在需要时提供任何翻译。这通常适用于像UTF-16这样的简单数据格式,但不适用于具有许多可变长度类型的格式。

此外,如果您执行诸如提供长度前缀或文件偏移量之类的操作,您可能会有32位和64位指针的混合。32位平台不能创建大于4 GB的mmap视图,因此您不太可能支持大于4 GB的文件大小。像rrdtool这样的程序采用了这种方法,并且在64位平台上支持更大的文件大小。这意味着,如果您在文件中使用平台指针大小,那么您的二进制文件将不能跨平台兼容。

如果你一开始就试图创建一种独立于平台的数据格式,你通常会犯错误,并且必须在以后返回并修复这些错误。这意味着修复数据转换代码中的错误将破坏所有平台上的现有客户端。

票数 6
EN

Stack Overflow用户

发布于 2009-06-21 23:19:23

是。

mmap将原始文件数据映射到进程地址空间。它不知道原始数据代表什么,更不用说尝试为您转换数据了。如果要将相同的文件映射到具有不同字节顺序的体系结构上,则必须自己进行任何必要的转换。

但这真的取决于您的特定需求。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1025783

复制
相关文章
Python实现深度优先与广度优先
二叉树的两种遍历是数据结构的经典考察题目, 广度遍历考察队列结构, 深度遍历考察递归 二叉树 深度优先 先序遍历(父, 左子, 右子) 0, 1, 3, 7, 8, 4, 9, 2,
zhaoolee
2018/04/19
2K0
Python实现深度优先与广度优先
c++ stl 优先队列_低优先级队列要等几局
我们传三个参数进去,可以看到优先级队列模板有三个参数,一个是数据类型,一个是被适配的容器,一个是仿函数,仿函数在下面我们 会讲解,一般第二个参数传入的容器需要满足可以随机访问,例如vector和deque。
全栈程序员站长
2022/11/09
6180
c++ stl 优先队列_低优先级队列要等几局
深度优先搜索与广度优先搜索
https://leetcode-cn.com/problems/max-area-of-island/
Autooooooo
2020/11/09
1.1K0
深度优先搜索与广度优先搜索
优先级队列默认最小值优先吗_低优先级队列要等几局
常见的排序方法(插入、快排等),排序的对象和比较的对象是一样的,根据数本身的大小进行排序。
全栈程序员站长
2022/11/09
4780
leetcode-深度优先与广度优先遍历
深度优先遍历就是当我们搜索一个树的分支时,遇到一个节点,我们会优先遍历它的子节点直到最后根节点为止,最后再遍历兄弟节点,从兄弟子节点寻找它的子节点,直到搜索到最后结果,然后结束。
Maic
2022/07/28
6390
leetcode-深度优先与广度优先遍历
Python中优先级_低优先级队列不止5把
优先级队列是一种容器型数据结构,它能管理一队记录,并按照排序字段(例如一个数字类型的权重值)为其排序。由于是排序的,所以在优先级队列中你可以快速获取到最大的和最小的值。
全栈程序员站长
2022/11/09
6260
Python如何实现深度优先与广度优先?
小猿会从最基础的面试题开始,每天一题。如果参考答案不够好,或者有错误的话,麻烦大家可以在留言区给出自己的意见和讨论,大家是要一起学习的 。
程序员小猿
2021/01/19
6750
深度优先搜索遍历与广度优先搜索遍历
1、图的遍历      和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问。它是许多图的算法的基础。      深度优先遍历和广度优先遍历是最为重要的两种遍历图的方法。它们对无向图和有向图均适用。   注意:     以下假定遍历过程中访问顶点的操作是简单地输出顶点。 2、布尔向量visited[0..n-1]的设置      图中任一顶点都可能和其它顶点相邻接。在访问了某顶点之后,又可能顺着某条回路又回到了该顶点。为了避免重复访问同一个顶点,必须记住每个已访问的顶点。为此,可设一布尔向量visited[0..n-1],其初值为假,一旦访问了顶点Vi之后,便将visited[i]置为真。 深度优先遍历(Depth-First Traversal) 1.图的深度优先遍历的递归定义      假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。      图的深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-First Search)。相应地,用此方法遍历图就很自然地称之为图的深度优先遍历。 2、深度优先搜索的过程      设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y)。若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的边,否则沿边(x,y)到达未曾访问过的y,对y访问并将其标记为已访问过;然后从y开始搜索,直到搜索完从y出发的所有路径,即访问完所有从y出发可达的顶点之后,才回溯到顶点x,并且再选择一条从x出发的未检测过的边。上述过程直至从x出发的所有边都已检测过为止。此时,若x不是源点,则回溯到在x之前被访问过的顶点;否则图中所有和源点有路径相通的顶点(即从源点可达的所有顶点)都已被访问过,若图G是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新源点,进行新的搜索过程。 3、深度优先遍历的递归算法 (1)深度优先遍历算法   typedef enum{FALSE,TRUE}Boolean;//FALSE为0,TRUE为1   Boolean visited[MaxVertexNum]; //访问标志向量是全局量   void DFSTraverse(ALGraph *G)   { //深度优先遍历以邻接表表示的图G,而以邻接矩阵表示G时,算法完全与此相同     int i;     for(i=0;i<G->n;i++)       visited[i]=FALSE; //标志向量初始化     for(i=0;i<G->n;i++)       if(!visited[i]) //vi未访问过         DFS(G,i); //以vi为源点开始DFS搜索    }//DFSTraverse (2)邻接表表示的深度优先搜索算法   void DFS(ALGraph *G,int i){     //以vi为出发点对邻接表表示的图G进行深度优先搜索     EdgeNode *p;     printf("visit vertex:%c",G->adjlist[i].vertex);//访问顶点vi     visited[i]=TRUE; //标记vi已访问     p=G->adjlist[i].firstedge; //取vi边表的头指针     while(p){//依次搜索vi的邻接点vj,这里j=p->adjvex       if (!visited[p->adjvex])//若vi尚未被访问         DFS(G,p->adjvex);//则以Vj为出发点向纵深搜索       p=p->next; //找vi的下一邻接点      }    }//DFS (3)邻接矩阵表示的深度优先搜索算法   void DFSM(MGraph *G,int i)   { //以vi为出发点对邻接矩阵表示的图G进行DFS搜索,设邻接矩阵是0,l矩阵     int j;     printf("visit vertex:%c",G->vexs[i]);//访问顶点vi     visited[i]=TRUE;     for(j=0;j<G->n;j++) //依次搜索vi的邻接点       if(G->edges[i][j]==1&&!vi
阳光岛主
2019/02/19
2.4K0
java运算符及优先级由高到低_java中运算符优先级排序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/15
3830
字节转MB与Mb转字节[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/166445.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
1.1K0
数据结构(九):广度优先与深度优先
广度优先搜索(breadth-first search)和深度优先搜索(depth-first search)是两种探索图/树中顶点的思路。这两种搜索方式可以用来查找图中某个指定的顶点,也可以用来对图中顶点进行遍历。
zhipingChen
2018/11/29
9600
数据结构(九):广度优先与深度优先
优先队列与考试
这次leetcode周赛第三题是一个求平均值的问题,暴力解法容易超时,比较好的做法是通过优先级队列来实现每次的选择,使得复杂度降为
ACM算法日常
2021/03/16
5410
*与++优先级
前缀递增递减和*优先级相同,从右到左; 后缀递增递减比前缀优先级高,从左到右。 比如 int arr[5] = { 1,3,5,7,9 }; int *p = arr; *++p:p先自+,然后*p,最终为3——马上改变指针,*下一个指针 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1] ————之后改变指针,*原数据,指针++ *(p++):效果等同于*p++ ——之后改变指针,*原数据,指针++(++执行完赋值语句再+) (*p)++:先*p,即arr[0]=1,然后1
嵌入式与Linux那些事
2021/05/20
6450
网络字节序与主机字节序转换
在Linux网络编程中,经常碰到网络字节序与主机字节序的相互转换。说到网络字节序与主机字节序需要清晰了解以下几个概念。
恋喵大鲤鱼
2018/08/03
5.6K0
网络字节序与主机字节序转换
深度优先搜索与广度优先搜索的探索之路
在数据结构和算法的世界中,深度优先搜索(DFS)和广度优先搜索(BFS)是两种基本且常用的图遍历算法。它们在解决许多实际问题中扮演着重要角色。本文旨在深入探讨这两种算法的原理,并分析它们之间的区别。
运维开发王义杰
2023/10/23
2880
深度优先搜索与广度优先搜索的探索之路
Java 字节的常用封装一. Java 的字节二. 常用封装三. mmap 的操作四. 总结
byte (字节) 是 Java 中的基本数据类型,一个 byte 包含8个 bit(位),byte 的取值范围是-128到+127。
fengzhizi715
2018/12/28
5500
网络字节序与主机字节序的转换
 在对IP地址结构体SOCKADDR_IN赋值的时候,经常会用到下列的函数htonl,htons,inet_addr,与之相对应的函数是ntohl,ntohs,inet_ntoa。查看这些函数的解析,会发现这些函数其实是与主机字节序和网络字节序之间转换有关。就是什么网络字节序,什么是主机字节序呢?下面我写出他们之间的转换:
阳光岛主
2019/02/19
1.2K0
优先队列的优先级_kafka优先级队列
☺优先队列是一种用来维护一组元素构成的结合S的数据结构,其中每个元素都有一个关键字key,元素之间的比较都是通过key来比较的。优先队列包括最大优先队列和最小优先队列,优先队列的应用比较广泛,比如作业系统中的调度程序,当一个作业完成后,需要在所有等待调度的作业中选择一个优先级最高的作业来执行,并且也可以添加一个新的作业到作业的优先队列中。
全栈程序员站长
2022/10/05
1.4K0
堆排序与优先队列
(二叉)堆物理上是一个数组,逻辑上是一棵完全二叉树,树上的每一个结点对应数组中的一个元素。 设表示堆的数组 ,其包含两个属性:
hotarugali
2022/03/01
3280
混合字节序、小字节序和大字节序(网络字节序)
下面代码可能的输出结果是() int main() {         unsigned x = 0x12345678;         unsigned char *p = (unsigned char*)&x;         for (int i=0; i<4; i++)         {                 printf("%x\n", *p);                 p++;         }         return 0; } 参考:http://zh.wikipedia.org/wiki/字节序
一见
2018/08/10
7870

相似问题

高字节优先vs低字节优先

22

使用C确定系统是使用高字节优先顺序还是使用低字节优先顺序

43

在将数据存储到Cassandra中时,是高字节优先还是低字节优先?

10

在C#中快速实现数组字节从高字节优先到低字节优先的转换

31

如何使用Perl在低字节优先顺序上生成SDBM文件(.dir和.pag),并在高字节优先顺序上工作?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文