C和C++ 变量内存
2019-08-16 07:42:44来源:博客园 阅读 ()
C和C++ 变量内存
当我们在C或C++ 代码中定义了一个 int /long 类型的变量时,计算机会在内存中分配一段连续的内存来保存变量的值。(int 占用的内存大小和编译器位数有关,16位占用2个字节,32位占用4个字节, long 在32位编译器占用4个字节,64位编译器占用8个字节)。
#include <stdio.h> int main() {
int i = 1;
int j = -2;
long l = 3, m = 4;
printf("Hello world sizeof(i)=%d, sizeof(j)=%d, sizeof(l)=%d, sizeof(m)=%d!\n", sizeof(i), sizeof(j), sizeof(l), sizeof(m));
}
以上为我们在 hello world 基础上添加了一段扩展代码,用来打印变量占用字节。
我安装的 redhat 是64位,编译32位程序时使用
g++ -m32 test.cc -o test32 -g
输出结果
[**********]$ ./test Hello world sizeof(i)=4, sizeof(j)=4, sizeof(l)=8, sizeof(m)=8!
默认编译位64位程序。(如果linux是32位, -m64 生产64位程序)
g++ test.cc -o test -g
输出结果
[**********]$ ./test32 Hello world sizeof(i)=4, sizeof(j)=4, sizeof(l)=4, sizeof(m)=4!
-g是为了生产调试信息, 如果使用 gdb 调试程序,输入 gdb test
在第7行加入断点,运行到这里时会暂停。这时我们可以查看变量,内存等
i和j, l 和 m 的地址之间距离分别为 int 和 long 的字节数。
我们想查看变量在内存中保存的二进制值可以在 gdb 中使用 x/t &i 来达到目的
因为 j 是负数,保存样式和别的值区别大一些。(涉及反码,补码等内容会在后续说明)
在代码中定义的变量在 main 函数的函数体中,这种变量是保存在stack 中的,我们能看到在 stack 中的内存是从高位开始分配,如果是在 heap 上分配内存会从低位开始往高位分配,关于内存这方面的内容也会在后续文档中详细介绍。
以上示例是为了告诉大家,当我们定义了一个变量时,会在内存中开辟一段内存用于保存变量内容,开辟多少内存由变量类型来决定。
计算机在访问这块儿内存的时候,会根据内存地址找到初始位置,需要读取多长内存也是由变量类型来决定。
计算机只能识别0或者1,假定,从我们需要的内存地址开始,有一段内存的二进制数据为如下代码时
0000100110011100000000000100100...........
计算机怎么来确定真正需要的值是多少呢?这就是前边说的由变量类型来决定,变量类型说我需要2个字节,就会读取两个字节长度的内容,然后根据变量类型的正负来确定是原码还是补码来表示。接下来就是我们对这段内存变量做处理了,比如我们需要和另一个变量做加法,或者直接打印出来等等。
原文链接:https://www.cnblogs.com/kylinhu/p/11096414.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ 转换函数搭配友元函数 2020-06-10
- C++ 自动转换和强制类型转换(用户自定义类类型) 2020-06-10
- C++ rand函数 2020-06-10
- C++ 友元函数 2020-06-10
- C++ 运算符重载 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash