首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用C语言制作uint4_t、uint20_t、uint24_t和uint36_t等非标准的固定宽度整数

如何用C语言制作uint4_t、uint20_t、uint24_t和uint36_t等非标准的固定宽度整数
EN

Stack Overflow用户
提问于 2022-03-23 10:32:49
回答 1查看 167关注 0票数 0

我试图用最简单的方式用C定义4位、20位、24位和36位无符号整数。

bitfiels

  • Portability不是一个问题,

  • 内存空间不是一个问题,无论是

  • C99还是后来的
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-23 11:39:27

假设你在以下问题的评论中所说的话,你面临着几个问题:

在CPU仿真中,

  1. 通常这样做,就是使用最短的类型,它可以包含您想要存储的内容。因此,对于uint4_t,您需要一个uint8_tuint20_t需要一个uint32_t。然后,在发生下流/溢出的情况下,您将在纯C中设置模拟的CPU标志accordingly.
  2. Doing。更喜欢C++,至少要正确定义类型和操作符,并且不要通过每次使用这些类型调用一些臭名昭著的函数(带有潜在的PEBKAC错误)而感到头疼。在C中完成CPU仿真是因为大多数CPU共享相同的寄存器大小,并且它允许更高的速度。
  3. 如果您想要比较您的虚拟CPU性能,您需要计算的不是程序使用的实时时间,而是您模拟的CPU使用的虚拟时间。在时钟周期里。因此,您需要在每个模拟指令中包括其执行时间(时钟周期、内存等待状态、管道刷新等)。
  4. 唯一的其他方法是将模拟类型拆分为bool数组(8位)。因此,在内部,您的uint4_t将成为一个char[4],因此您可以访问单个位,并将其作为单个元素进行操作。但是对于uint36_t来说,它的使用将非常“有趣”,您将在主机上面临其他一些问题,比如缓存经常失效和对齐问题。而且您需要为这些类型编写所有基本操作,无论如何,您将无法依赖C操作(与使用上面最短的类型时不一样,请参阅第一点)。

CPU仿真不是一件容易的事情,试图比较仿真CPU和另一个仿真CPU的性能通常是完全不相关的。这在某种程度上是可能的,因为您尝试比较同一CPU的变体,但您需要一位优秀的硬件工程师在尝试做任何其他操作之前,为所有模拟指令提供所有的执行时间。

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

https://stackoverflow.com/questions/71585639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档