32位系统与64位系统 C/C++通用代码
来源:互联网 发布:刷单软件 编辑:程序博客网 时间:2024/05/17 01:41
c++/C 并没有规定内建数据类型具体size;只规定了一些规则,比如int 长度不必long长
win32 采用数据格式是ILP32,win64采用的数据格式是LLP64。
32/64系统数据长度最大的区别在于 long ,地址长度;
1.在32系统中我们经常用int储存地址,如果在64位环境下运行,地址是64位,int 为32位,用int保存地址会发生截取。
导致地址访问错误;
下面程序,就是用int保存地址,然后打印地址错执行的字符串。
该程序在win 32/64 编译环境下测试的时候,都能正常运行!
主要原因是地址虽然是64位,但是虚拟地址没有超过0XFFFFFFFF,在进行截取的时候发生如下变化。
x86是小端存储系统,
假设地址为0X 0000 0000 00ab cdef
该地址在内存X86 内存系统中的存储为
地址nn+1n+2n+3n+4n+5n+6n+7值efcdab0000000000当发生截取的时候
int address =P(地址)
截取低32为address的值,
address值在内存中的分布
虽然发生了截取,但是地址大小没有变化。
想要该程序在64位下无法运行,首先需要是非配给字符串的地址值大于0X FFFF FFFF;
在下暂时没有想到办法,希望大家帮帮忙
void printChars(int address)
{
char * pointer;
char **pP=&pointer;
*pP=(char *)address;
printf("str %s \n",pointer);
}
int main()
{
cout<<"long length: "<<sizeof(long)<<" pointer length"<<sizeof(long *)<<endl;
char str[]="abcdegf";
printChars((int)str);
system("pause");
return 1;
}
- 32位系统与64位系统 C/C++通用代码
- 如何区分32/64位系统(C代码)?
- 通过C代码判断系统是32位还是64位
- C获取系统是32位还是64位
- 32位与64位系统
- C程序如何区分是64位系统还是32位系统
- c语言中 32位系统和64位系统的区别
- [C/C++]_[初级]_[获取Windows系统的位数32位或64位]
- 32位系统与64位系统的区别
- Win7 32位系统与64位系统的区别
- 32位系统与64位系统之自我问答
- 32位系统,64位系统概念
- 32位C/C++程序移植到64位系统时需要注意的问题
- 32位C/C++程序移植到64位系统时需要注意的问题
- 32位和64位系统下C内置类型的长度
- C语言在32位和64位系统上各类型所占字节数
- 64位系统下gcc按照32位编译c程序
- c判断windows的系统是32位还是64位
- MySQL 常用命令总结
- 字符串匹配算法总结(转)
- 数据结构第一章
- java.lang.NoClassDefFoundError: javax/servlet/AsyncContext
- Ubuntu安装eclipse和pydev成功后,新建项目输入项目名的时候出现"Project interpreter not specified"的错误
- 32位系统与64位系统 C/C++通用代码
- vim常用技巧总结
- android获取web服务器端session并验证登陆
- C++ 模版与线程安全锁的应用
- erlang进程性能分析方法
- Cocos2d-x开发环境配置
- 题目1449:确定比赛名次
- Horspool字符串匹配算法
- 跟着BOY学习开发cocos2d-x 游戏 (前提篇 一)