c++编程思想(三)--c++中c 续,重点sizeof和内存对齐

之前理论性的太多,下面就是代码及理论结合了

1、sizeof()是一个独立运算符,并不是函数,可以让我们知道任何变量字节数,可以顺带学一下struct,union,内存对齐

内存对齐:为了机器指令快速指向地址值,编译器内部实际上会内存对齐,怎么理解了,以struct为例

先讲一下各个变量类型内存大小

所以struct理论上是:1+2+4+4+4+8+8 = 31,但是实际是

实际大小是32(1+2+1+4)+(4+4)+8+8

然后再把int和short位置调换

实际大小是40   (1+3)+4+(2+2)+4+(4+4)+8+8

这边会因为不同的系统位数和编译器产生不同的变化

union更出乎意料

g

其所有变量共用一个地址,所以内存大小为最大的一个变量,一次只能保存一个变量的值,会覆盖

2、下面提俩个调试技巧

汇编或者在硬件上嵌入式开发的时候,不方便代码频繁修改,可以用

1)、预处理的方式

#define DEBUG

#if DEBUG

/*  处理调试  */

#endif

2)、代码开关,加个bool 参数,其值可以从函数参数输入

3、函数指针

void func(){

..................;

}这是函数申明

void (*p) ();函数指针,指向一个无参返回值为void型的函数,这是基本的

还有很多复杂的感觉不会用到,如double  (*(*(*p)())[10])();p是一个指向函数的指针,并且无参数,并指向一个含有10个指向函数指针数组的指针--业务代码很少用,这么用后面也基本上没有办法维护了,顶多个人自己写的库内部使用,不应该作为接口

注意: int (*(*p())[10]) ();是一个函数,p是一个返回指针的函数,该指针指向含有10个函数指针的数组

时间: 2024-08-05 11:12:38

c++编程思想(三)--c++中c 续,重点sizeof和内存对齐的相关文章

Java编程思想(三) —— 访问权限的控制

之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的. (1)首先是包名 使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类.如: package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } } 自定义的包,通过引入自己的包,以后你就可以使用自己写的方法进行字符串的打

unix环境高级编程(第三版)中apue.h文件的配置问题

最近刚开始学习unix环境高级编程(第三版),其中有个作者自己写的apue.h文件,在这归总下相应的配置方法,希望对有需要的朋友们有所帮助 首先http://www.apuebook.com/code3e.html 上去下载相应的压缩包,注意自己书的版本. 下载完成之后,鉴于大多数朋友学习linux都是基于虚拟机的,所以顺便附上虚拟机与本地主机传输文件的方式 首先下载SSH Secure Shell 这个工具,然后直接点击quick connect, 弹出如下界面,输入虚拟机的ip地址,和登录用

Linux中_ALIGN宏背后的原理——内存对齐

转载自: http://englishman2008.blog.163.com/blog/static/2801290720114210254690/ 1. 原理    int a;     int size = 8;        <----> 1000(bin) 计算a以size为倍数的下界数:    就让这个数(要计算的这个数)表示成二进制时,最后三位为0就可以达到这个目标.只要下面这个数与a进行"与运算"就可以了:    11111111 11111111 1111

Java编程思想(四) —— 复用类

看了老罗罗升阳的专访,情不自禁地佩服,很年轻,我之前以为和罗永浩一个级别的年龄,也是见过的不是初高中编程的一位大牛之一,专访之后,发现老罗也是一步一个脚印的人.别说什么难做,做不了,你根本就没去尝试,也没有去坚持. If you can't fly then run,if you can't run then walk, if you can't walk then crawl,but whatever you do,you have to keep moving forward--Martin

c语言中内存对齐问题

在最近的项目中,我们涉及到了“内存对齐”技术.对于大部分程序员来说,“内存对齐”对他们来说都应该是“透明的”.“内存对齐”应该是编译器的“管辖范围”.编译器为程序中的每个“数据单元”安排在适当的位置上.但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”.如果你想了解更加底层的秘密,“内存对齐”对你就不应该再透明了. 一.内存对齐的原因 大部分的参考资料都是如是说的: 1.平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的:某些硬件平台只能在某些地址处取某些特定类

编程思想之多线程与多进程(4)——C++中的多线程

<编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,<编程思想之多线程与多进程(2)--线程优先级与线程安全>一文讲了线程安全(各种同步锁)和优先级,这是多线程学习必须了解的基础.本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法. 创建线程 在Windows平台,Windows API提供了对多线程的支持.前面进程和

编程思想之多线程与多进程(2)——Java中的多线程

原文:http://blog.csdn.net/luoweifu/article/details/46673975 作者:luoweifu 转载请标名出处 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java中多线程程序的开发 单线程 任何程序至少有一个线程,即使你没有主动地创建线程,程序从一开始执行就有一个默认的线程,被称为主线程,只有一个线程的程序称为单线程程序.如下面

java编程思想总结(三)

java编程思想总结(三) java编程思想总结是一个持续更新的系列,是本人对自己多年工作中使用到java的一个经验性总结,也是温故而知新吧,因为很多基础的东西过了这么多年,平时工作中用不到也会遗忘掉,所以看看书,上上网,查查资料,也算是记录下自己的笔记吧,过一段时间之后再来看看也是蛮不错的,也希望能帮助到正在学习的人们,本系列将要总结一下几点: 面向对象的编程思想 java的基本语法 一些有趣的框架解析 实战项目的整体思路 代码的优化以及性能调优的几种方案 整体项目的规划和视角 其它遗漏的东西

【转】编程思想之多线程与多进程(3)——Java中的多线程

<编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java中多线程程序的开发 单线程 任何程序至少有一个线程,即使你没有主动地创建线程,程序从一开始执行就有一个默认的线程,被称为主线程,只有一个线程的程序称为单线程程序.如下面这一简单的代码,没有显示地创建一个线程,程序从main开始执行,main本身就是一个线程(主线程),单个线程从头执行到尾. [Demo1]:单线程程序 pu