首页 > 编程语言 >C++学习之路——第一天(结构体、C++程序从编写到运行)

C++学习之路——第一天(结构体、C++程序从编写到运行)

时间:2024-07-21 17:40:43浏览次数:7  
标签:字节 第一天 代码 C++ 编译器 编写 占用 位机

引子:兜兜转转还是你~

C++数据类型

int 占用 4 个字节(32 位机)

char 占用 1 个字节(8 位机)

short 占用 2 个字节(16 位机)

long 占用 4 个字节(32 位机)

float 占用 4 个字节(32 位机)

double 占用 8 个字节(64 位机)

long double 占用 16 个字节(64 位机)

define 和 const 的区别

define 在编译预处理过程中把所有的符号常量替换为所指定的字符序列,它没有类型,在内存中并不存在以符号常量为名的存储单元,它只是简单的字符串替换,因此它没有数据类型,也就没有存储单元。

const 具有变量的特征,它有数据类型,需要占用存储单元,存储单元中存放的是不可变的常量值。

结构体内存对齐

struct S1
{
    char a;
    int b;
    char c;
} s1;
struct S2
{
    char a;
    char c;
    int b;
} s2;

sizeof(s1)=12, sizeof(s2)=8

结构体默认的字节对齐一般满足以下三点:

1、结构体变量的首地址能够被其最宽基本类型的成员变量整除

2、结构体每个成员相对于结构体首地址的偏移量是该成员类型大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal alignment)。

3、结构体总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing alignment)。

C++程序是如何运行的

C++程序从编写完成到生成可执行文件(exe)需要经过以下几个阶段:

预处理(Preprocessing):预处理器负责处理源代码中的预处理指令,如#include、#define 和#if 等。预处理器将替换源代码中的宏定义和条件编译,生成一个预处理后的源文件(通常为.i 文件)。

编译(Compilation):编译器将预处理后的源文件转换为目标代码,通常是汇编代码(.s 文件)或者机器代码。在这个过程中,编译器会检查语法错误并对代码进行优化。

汇编(Assembly):汇编器将编译器生成的汇编代码转换成目标代码文件(通常是.obj 或.o 文件)。目标代码文件中包含了程序的机器指令、符号表(用于后续链接)以及重定位信息(如全局变量的地址)。

链接(Linking):链接器负责将一个或多个目标代码文件连接成一个可执行文件(如.exe 或.elf)。在这个过程中,链接器会解析符号表并处理外部引用,将不同的目标代码文件中的同名符号合并,还会将执行环境(如 C 运行时库)所需的代码和数据添加进可执行文件。

加载(Loading):当您运行可执行文件时,加载器会将可执行文件从磁盘加载到内存中,并为其分配运行时资源,如内存和文件描述符。接着,操作系统将控制权交给程序入口点(main 函数),程序开始执行。v

标签:字节,第一天,代码,C++,编译器,编写,占用,位机
From: https://www.cnblogs.com/sherioc/p/18314732

相关文章

  • C++多线程编程中的锁详解
    在现代软件开发中,多线程编程是提升应用程序性能和响应能力的重要手段。然而,多线程编程也带来了数据竞争和死锁等复杂问题。为了确保线程间的同步和共享数据的一致性,C++标准库提供了多种锁机制。1.std::mutexstd::mutex是最基础的互斥锁,用于保护共享数据,防止多个线程同时访问......
  • C++ PDF PoDoFo库使用教程
    #include<podofo/podofo.h>#include<iostream>//AllPoDoFoclassesarememberofthePoDoFonamespace.//usingnamespacestd;usingnamespacePoDoFo;PdfFont*getFont(PdfDocument&doc);//Base14+othernon-Base14fontsforcomparis......
  • C++字体库开发之fontconfig使用五
    代码 #include<cassert>#include<algorithm>#include"fontconfig/fontconfig.h"#include<stdexcept>#include<iostream>#defineHAS_FALLBACK_CONFIGURATIONenumFontStyle:uint16_t{Regular=0,Italic=0x01......
  • Adobe InCopy 2024 v19.5 (macOS, Windows) - 编写和副本编辑软件
    AdobeInCopy2024v19.5(macOS,Windows)-编写和副本编辑软件Acrobat、AfterEffects、Animate、Audition、Bridge、CharacterAnimator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、LightroomClassic、MediaEncoder、Photoshop、PremierePro、AdobeXD......
  • c++中的文件操作
    前言hello,大家好啊,这里是文宇,不是文字,是文宇哦。C++中的文件操作是用于在程序中读取、写入和操作文件的一种重要功能。文件操作允许程序直接与外部文件进行交互,这对于数据的存储和读取非常有用。在C++中,文件操作主要通过iostream库中的fstream类来实现。fstream类提供了一种......
  • Linux下C++静态链接库的生成以及使用
    目录一.前言二.生成静态链接库三.使用静态链接库一.前言这篇文章简单讨论一下Linux下如何使用gcc/g++生成和使用C++静态链接库(.a文件)。二.生成静态链接库先看下目录结构然后看下代码//demo.h#ifndefDEMO_H#defineDEMO_H#include<string>classDemo{p......
  • C++文件操作-文本文件-读文件
    第一种#include<iostream>//1、包含头文件fstream#include<fstream>usingnamespacestd;voidtest01(){ //2、创建流对象 ifstreamifs; //3、打开文件并且判断是否打开成功 ifs.open("test.txt",ios::in); if(!ifs.is_open()) { cout<<"文件打开失......
  • C++ 鼠标轨迹API【神诺科技SDK】
    一.鼠标轨迹模拟简介传统的鼠标轨迹模拟依赖于简单的数学模型,如直线或曲线路径。然而,这种方法难以捕捉到人类操作的复杂性和多样性。AI大模型的出现,使得神诺科技 能够通过深度学习技术,学习并模拟更自然的鼠标移动行为。二.鼠标轨迹算法实现AI大模型通过学习大量的人类鼠标操......
  • C++鼠标轨迹API - 神诺科技SDK
    一.鼠标轨迹模拟简介传统的鼠标轨迹模拟依赖于简单的数学模型,如直线或曲线路径。然而,这种方法难以捕捉到人类操作的复杂性和多样性。AI大模型的出现,使得神诺科技 能够通过深度学习技术,学习并模拟更自然的鼠标移动行为。二.鼠标轨迹算法实现AI大模型通过学习大量的人类鼠标操......
  • 【Tomcat系列】编写第一个Java程序
    接上文【Tomcat系列】安装+环境配置使用Tomcat之前需要现有JDK(JavaDevelopmentKit)环境。根据上文配置的环境变量,可以写一个简单的java程序来测试JDK是否已安装成功:publicclassTest{publicstaticvoidmain(Stringargs[]){System.out.println("Thisisatestprog......