数值、位域的内存表示

2024-03-01 10:08
文章标签 内存 位域 数值 表示

本文主要是介绍数值、位域的内存表示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数值、位域的内存表示

#include <stdio.h>
#include <string.h>void see(char*p, int size);struct weiyu
{int f1 : 1;int f2 : 2;int f3 : 3;int f4 : 4;int f5 : 5;int f6 : 6;int f7 : 7;int f8 : 8;int f9 : 9;int f10 : 10;
};
void testwy()
{printf("位域的内存表示 值为0的位即是字段在内存中占用的空间\n");printf("sizeof(weiyu)=%d\n",sizeof(struct weiyu));struct weiyu wy1;memset(&wy1, 0xff, sizeof(wy1));wy1.f1 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f2 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f3 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f4 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f5 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f6 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f7 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f8 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f9 = 0;see((char *)&wy1, sizeof(wy1));memset(&wy1, 0xff, sizeof(wy1));wy1.f10 = 0;see((char *)&wy1, sizeof(wy1));}void binarryStr(char c, char str[9]){for (size_t i = 0; i < 8; i++){str[7 - i] = (c & 1 == 1) ? '1' : '0';c = c >> 1;}
}void see(char*p, int size)
{for (int i = 0; i<size; i++){char c = *(p + i) ;char str[9] = { 0 };binarryStr(c, str);printf("%s ", str);}printf("\n");
}void testshuzhi()
{printf("数值的内存表示0 ~ 3,0xff-2 ~ 0xff+4 \n");for (size_t i = 0; i < 4; i = i+1){see((char *)&i, 4);}printf("\n");for (size_t i = 0xff-2; i < 0xff+4; i = i + 1){see((char *)&i, 4);}
}
int main()
{testwy();printf("\n");testshuzhi();return 0;
}

打印结果

注意:
1,大端模式:高字节在内存的低地址中。假设内存地址从左往右升高,则高字节在左边,简单记为大端模式大数在前,小端模式大数在后。
2,小端模式下,第一比特位在第一字节最后一位,以此往前递推,直至本字节用完,再从第二字节第一比特位开始。
3,位域占用的比特位顺序与数值的比特位顺序相同。

这篇关于数值、位域的内存表示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/762077

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J