1、打印二进制机器码,程序内存分析,大端序小端序,指针数组,数组指针,数组的三种访问方式,typedef,#if-0-#endif,求数组大小,括号表达式

简介:  1.打印二进制机器码(分别表示32位的和64位的) #include <stdio.h>   /*按照8位的长度打印一个数值*/ void dis8bit(char val) {    int bit = 8;    while(bit--)     {        if(1<<bit&v


1.打印二进制机器码(分别表示32位的和64位的)

#include <stdio.h>

 

/*按照8位的长度打印一个数值*/

void dis8bit(char val)

{

   int bit = 8;

   while(bit--)

    {

       if(1<<bit&val){

           printf("1");

       } else {

           printf("0");

       }

       if(!(bit%4))

           printf(" ");

    }

   putchar(10);

}

 

/*按照32位长度打印数值的机器码*/

void dis32bit(int val){

   int bit = 32;

   while(bit--){

       if(1<<bit&val){

           printf("1");

       } else {

           printf("0");

       }

       if(!(bit % 4))

           printf(" ");

    }

   putchar(10);

}

 

int main(void)

{

   int a = -1,b = -128,c = 127,d = 0;

   dis8bit(a);

   dis8bit(b);

   dis8bit(c);

   dis8bit(d);

 

   int e = 127;

dis32bit(e);

 

   return 0;

}

2.关于程序内存。

Bss区的生命周期是从程序的开始到程序的结束。

 

3.关于数据在内存中的存储

int a;全局变量,并且未初始化,所在在数据段的bss区。被初始化为0

static int b; 静态全局变量,数据段的bss段,在bss区。

int c[10] = {1,2,3,4};  全局的数组在data段,这里的数据在运行的时候会被拷贝来的。

 

4.大端存储和小端存储引起的问题

在内存中的分析如下:

 

5.数据类型   *    指针变量

指针变量,本质同普通变量。

* 指明后面的变量为指针变量

数据类型指明,从该变量存放的地址处的寻址能力。

char *p;  代表了从p这个地址处的寻址能力是1个字节,(因为char *类型的寻址能力为1个字节)。

指针的一个重要概念   步长 =  数据类型的大小

int a[10]等价于==int[10]  a;

 

6.关于typedef关键字

typedef int ARRAY[10];   给数组定义别名

给参数起别名的步骤:

再如:

void (*p)(int,int);的别名为:typedefvoid (*pp)(int,int);这个时候pp就是指针函数的别名。

 

7.数组:

数组访问的方式有:

A:下标法,特例列举:

这里说明,如果想得到一个数组的值也可以通过i[a]è下标[数组名]的方式得到

B:偏移法的方式取数值,举例:

C:指针法

 

*p++ ==*p++

 

8.数组局部初始化

 

9.#if-0-#endif排除某段代码影响

 

10.数组求大小

求作为函数参数传递的数组名的大小:

11.括号表达式

分析:int xx[3][2] = {(1,2),(3,4),(5,6)};实际上等价于:intxx[3][2]={2,4,6};

内存分析:

目录
相关文章
|
6月前
|
存储 弹性计算 缓存
阿里云服务器ECS经济型、通用算力、计算型、通用和内存型选购指南及使用场景分析
本文详细解析阿里云ECS服务器的经济型、通用算力型、计算型、通用型和内存型实例的区别及适用场景,涵盖性能特点、配置比例与实际应用,助你根据业务需求精准选型,提升资源利用率并降低成本。
446 3
|
2月前
|
设计模式 缓存 Java
【JUC】(4)从JMM内存模型的角度来分析CAS并发性问题
本篇文章将从JMM内存模型的角度来分析CAS并发性问题; 内容包含:介绍JMM、CAS、balking犹豫模式、二次检查锁、指令重排问题
108 1
|
5月前
|
存储 人工智能 自然语言处理
AI代理内存消耗过大?9种优化策略对比分析
在AI代理系统中,多代理协作虽能提升整体准确性,但真正决定性能的关键因素之一是**内存管理**。随着对话深度和长度的增加,内存消耗呈指数级增长,主要源于历史上下文、工具调用记录、数据库查询结果等组件的持续积累。本文深入探讨了从基础到高级的九种内存优化技术,涵盖顺序存储、滑动窗口、摘要型内存、基于检索的系统、内存增强变换器、分层优化、图形化记忆网络、压缩整合策略以及类操作系统内存管理。通过统一框架下的代码实现与性能评估,分析了每种技术的适用场景与局限性,为构建高效、可扩展的AI代理系统提供了系统性的优化路径和技术参考。
254 4
AI代理内存消耗过大?9种优化策略对比分析
|
9月前
|
存储 Java
课时4:对象内存分析
接下来对对象实例化操作展开初步分析。在整个课程学习中,对象使用环节往往是最棘手的问题所在。
|
9月前
|
Java 编译器 Go
go的内存逃逸分析
内存逃逸分析是Go编译器在编译期间根据变量的类型和作用域,确定变量分配在堆上还是栈上的过程。如果变量需要分配在堆上,则称作内存逃逸。Go语言有自动内存管理(GC),开发者无需手动释放内存,但编译器需准确分配内存以优化性能。常见的内存逃逸场景包括返回局部变量的指针、使用`interface{}`动态类型、栈空间不足和闭包等。内存逃逸会影响性能,因为操作堆比栈慢,且增加GC压力。合理使用内存逃逸分析工具(如`-gcflags=-m`)有助于编写高效代码。
176 2
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
389 62
|
12月前
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
419 1
|
程序员 C语言
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门
C语言中的指针既强大又具挑战性,它像一把钥匙,开启程序世界的隐秘之门。本文深入探讨了指针的基本概念、声明方式、动态内存分配、函数参数传递、指针运算及与数组和函数的关系,强调了正确使用指针的重要性,并鼓励读者通过实践掌握这一关键技能。
239 1
|
容器
在使用指针数组进行动态内存分配时,如何避免内存泄漏
在使用指针数组进行动态内存分配时,避免内存泄漏的关键在于确保每个分配的内存块都能被正确释放。具体做法包括:1. 分配后立即检查是否成功;2. 使用完成后及时释放内存;3. 避免重复释放同一内存地址;4. 尽量使用智能指针或容器类管理内存。

热门文章

最新文章