20140319 const sizeof define 编译时分配内存
1、面试宝典预处理,const,sizeof
Define作用定义函数:
- //用一个宏定义FIND求一个结构体struc里某个变量相对于struc的偏移量,如FIND(student,a)//等于0 FIND(student,b)//等于4
- #include<stdio.h>
- #define FIND(strucrr,e) (unsigned int)&(((strucrr *)0)->e)
- struct student
- {
- double ccc;
- int a;
- char b;
- };
- int main()
- {
- struct student A;
- printf("ccc的偏移地址为:%d\n",FIND(student,ccc));
- printf("a的偏移地址为:%d\n",FIND(student,a));
- printf("b的偏移地址为:%d\n",FIND(student,b));
- printf("成员1地址:%x\n",&(A.ccc));
- printf("成员2地址:%x\n",&(A.a));
- printf("成员3地址:%x\n",&(A.b));
- printf("结构体变量A所占内存%d\n",sizeof(A)); //结构体变量A所占内存空间始终大于结构的大小,原因是因为内存对齐
- return 0;
- }
若出现以下错误,解决方案是:在项目属性->配置属性->清单工具->输入输出嵌入清单该“是”为“否”,即可解决问题
结果如下所示:
- #include<stdio.h>
- #define MIN(A,B) (A>B?B:A)
- void main()
- {
- int A=2;
- int B=1;
- printf("%d",MIN(A,B));
- }
cosnt
关于书上说的“编译的时候分配内存” :http://www.cnblogs.com/helinsen/archive/2012/10/02/2710460.html
const作用http://blog.csdn.net/gulin20475/article/details/6747660
include和extern的关系
两种情况下:左边const相当于define,不分配内存,编译器经过类型检查后直接用100在编译时替换;右边是普通变量,分配内存;加extern就会分配内存
const变量默认是内部部链接,普通变量默认是外部链接
- //test.cpp
- #include<stdio.h>
- const int r=100; //1处:普通变量默认就是extern,但是const是默认内部链接的,如果要外部连接必须加上extern
- extern void print();
- void main()
- {
- print();
- }
- test1.cpp
- #include<stdio.h>
- extern int r;//2处
- extern void print()
- {
- printf("%d",r);
- }
会在链接时出现以下错误(编译正确):原因就是普通变量默认就是extern,但是const是默认内部链接的,如果要外部引用必须加上extern
所以1处修改为:extern const int r;同样会出现以上错误,这次的原因就在于2处的extern int r没加const。接着修改2处为extern const int r;成功!
cost 引用
什么情况下不能重载,什么情况下不能重载?
void f(int i) {......} file://一个函数
void f(int i) const {......} file://上一个函数的重载
关于函数overloading, 不能根据返回值类型来确定
double max( int a, int b);
int max( int a, int b);
也不能根据参数的默认值来判断
int max( int a, int b);
int max( int a, int b, int c=12);
const成员函数:
它的声明形如:
int f( ) const;//const放在函数的最后,编译器会对这个函数进行检查,在这个函数中的任何试图改变成员变量和调用非const成员函数的操作都被视为非法
//假如有一个叫做X的类,它有一个int成员变量r,我们需要通过一个const成员函数f( )来对这个r进行++r操作,代码如下
void X::f( ) const
{ (const_cast<X*>(this)) -> ++r; } //通过this指针进行类型强制转换实现
另外一种方法就是使用关键字:mutable。如果你的成员变量在定义时是这个样子的:
mutable int r ;
那么它就告诉编译器这个成员变量可以通过const成员函数改变。编译器就不会再理会对他的检查了。
20140319 const sizeof define 编译时分配内存的更多相关文章
- C语言中的编译时分配内存
1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放 ...
- mdk编译时的内存分析
内存四区(代码区,全局区,栈区,堆区) Code:即代码域,它指的是编译器生成的机器指令,这些内容被存储到ROM区. RO-data:Read Only data,即只读数据域,它指程序中用到的只读数 ...
- 记一次因为Gradle与Lombok不兼容导致编译时的内存溢出 Expiring Daemon because JVM heap space is exhausted
1.现象 版本 Gradel:6.1.1 / 6.5.1 Lombok:1.8.6 / 1.8.10 截图 解决过程 调大idea的堆内存 不行 × idea安装目录中找到 idea64.exe.vm ...
- 自制编程语言crowbar(v0.1)构建解析器时分配内存
crowbar中第一次申请内存是在生成解析器的时候: /* interface.c */CRB_Interpreter *CRB_create_interpreter(void) { MEM_Stor ...
- 问题-Delphi2007编译时提示内存错误“sxs.dll. No Debug Info.ACCESS 0xXXXXX"
相关资料:http://bbs.csdn.net/topics/340132341 问题现象:在调试程序时,未进工程文件中的TApplication.Run;证明不是代码问题. 问题原因:可能是因为* ...
- 函数定义从零开始学C++之从C到C++(一):const与#define、结构体对齐、函数重载name mangling、new/delete 等
今天一直在学习函数定义之类的问题,下午正好有机会和大家共享一下. 一.bool 类型 逻辑型也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC+ ...
- c++ 程序编译后运行时的内存分配
程序编译后运行时的内存分配 太好的文章了,看到不得不转,转自:http://blog.sina.com.cn/s/blog_5420e0000101a0w1.html 一.编译时与运行时的内存情况 1 ...
- QT编译时 cc1plus进程占用大量内存卡死问题解决
QT5.7 做一个demo编译时,内存几乎完全消耗,卡死.经尝试发现是添加资源文件过大导致(不知是单个文件过大触发还是文件总共过大触发)的.我的资源文件工136M,单个最大是125M左右. 解决方法是 ...
- Linux设备驱动程序学习之分配内存
内核为设备驱动提供了一个统一的内存管理接口,所以模块无需涉及分段和分页等问题. 我已经在第一个scull模块中使用了 kmalloc 和 kfree 来分配和释放内存空间. kmalloc 函数内幕 ...
随机推荐
- 树————N叉树的层序遍历
思想: 使用队的思想,将每一层的节点放入队列中,依次弹出,同时将其children放入队列. c++ /* // Definition for a Node. class Node { public: ...
- 关闭windows的DEP
1.与开启dep时一样,按组合键win+r打开运行窗口,输入cmd并按回车,如图所示: 2.调出命令提示符窗口后,输入bcdedit.exe/set {current} nx AlwaysOff ...
- XML XPATH simpleXML
XPath 通过DOM结构定位节点,在数据量很大的情况下速度下降的很厉害.解决方法是XPath.Xpath的作用:用于快速定位节点 position()是节点的位置,节点的位置是从1开始 simple ...
- Nginx学习——简介及常用命令
Nginx简介 Nginx是什么 同Apache一样,都是一种WEB服务器 基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP协议提供各种网络服务 ...
- assignment of day four
目录 1.Numeric type (1)integer (2)float Usefulness Define How to use 2.string type Use Define How to u ...
- 精选 Dubbo RPC 面试题,比较全面,含答案
精选 Dubbo RPC 面试题,比较全面,含答案 hu1991die 搜云库技术团队 搜云库技术团队 微信号 souyunku 功能介绍 专注于分享最有价值的互联网技术干货文章,内容覆盖,Java后 ...
- 笔记33 Spring MVC的高级技术——Spring MVC配置的替代方案
一.自定义DispatcherServlet配置 AbstractAnnotationConfigDispatcherServletInitializer所完成 的事情其实比看上去要多.在Spitt ...
- ElementUI的使用
一.安装 1.安装 在项目目录下执行 npm i element-ui -S 2.引入 在 main.js 中写入以下内容: import ElementUI from 'element-ui'; i ...
- 从psd图中将图层导出成单独文件
- js判断是否为手机端访问
随着移动端越来越重要,pc和移动端网站后台系统可能是同一个,登录或者某个特定时期需要根据不同访问来源,跳转不同页面或者做不同的处理: 这时我们就需要js的 navigator 对象: 我们先了解一下n ...