unsigned char与unsigned char m_array[5]
2013-11-01 22:45
766 查看
#include <stdio.h> int main(int argc, char **argv) { unsigned char ch_1 = '1'; unsigned long* ch; unsigned char m_array[5] = {0}; unsigned char test; test = sizeof(ch_1); ch = (unsigned long *)0x0012ff71; *ch = 0x31; return 0; }
变量储存空间分布图:
内存:
对比变量声明顺序:
unsigned char ch_1 = '1'; unsigned long* ch; unsigned char m_array[5] = {0}; unsigned char test;
得出结论:
栈为递减分配变量储存的;
Breakpoint:test = sizeof(ch_1);
内存:
改变内存单元号:
0x0012FF6C、0x0012FF7C、0x0012FF70~0x0012FF74;
---------------------------------------------------------------------------
Breakpoint:ch = (unsigned long *)0x0012ff71;
内存:
改变内存单元号:
+0x0012FF79~0x0012FF7B;
---------------------------------------------------------------------------
Breakpoint:*ch = 0x31;
内存:
改变内存单元号:
0x0012FF72;
在例程中增加:
unsigned char* ha_1; ha_1 = (unsigned char *)malloc(sizeof(unsigned char) * 5);
变量地址:
变量值:
内存:
执行:
*ha_1 = '1'; ha_1++; *ha_1 = '2';
变量地址:
变量值:
内存:
执行到:
变量地址:
程序开始运行时:
变量地址:
得出什么结论呢?
unsigned long* ch; unsigned char* ha_1; unsigned char m_array[5] = {0};
声明之后,均指定了规定的内存空间;并非是m_array[5]有分配空间而ch未分配内存空间;
那ha_1经过malloc()空间分配之后,与m_array[5]和ch有什么区别呢?答案简单,m_array[5]和ch在操作系统知道与管理的内存段中,也是人们所称的“栈”中,而ha_1为指向用于动态申请的内存段的指针,即指向存储在此段中的一个内存单元,也是储存在操作系统不直接(原因为:映射)知道的内存段中即“堆”中。而存储在两个不同的段中的变量有什么不同Google有详细的解释再此不再论述(其实简而言之区别就是最终由谁来把它们清扫干净)。
--------------------------------------------------------------------------------------------------------------------
Malloc例子:
#include <stdio.h>
#include <malloc.h>
int main(int argc, char **argv)
{
unsigned char ch_1 = '1';
unsigned long* ch;
unsigned char* ha_1;
unsigned char m_array[5] = {0};
unsigned char test;
test = sizeof(ch_1);
ch = (unsigned long *)0x0012ff71;
*ch = 0x31;
ha_1 = (unsigned char *)malloc(sizeof(unsigned char) * 5);
*ha_1 = '1'; ha_1++; *ha_1 = '2';
return 0;
}
相关文章推荐
- 分析ecshop赠品在购物车中出现
- 16进制数转十进制数—实现C语言
- apue 学习笔记(2)
- Sublime Text2 常用快捷键
- 使用Mahout搭建推荐系统之入门篇1-搭建REST风格简单推荐系统
- wordpress资源
- 11.1会议记录
- Lua操作mysql
- 二维数组的二分查找
- 应届程序员笔试的困境—作弊与否
- nyoj-784-Sigma
- css代码规范
- grub 无法正常安装
- ALSA声卡驱动中的DAPM详解之四:在驱动程序中初始化并注册widget和route
- OpenCV图象孔洞内轮廓填充
- PPT快捷键大全,让你快人一步
- OpenCV_轮廓的查找、表达、绘制、特性及匹配
- Oracle创建表空间、创建用户以及授权、查看权限常用sql语句
- C++用CreateProcess来打开IE (可隐藏IE窗口)
- root.sh 失败 重来