C/C++:内存分配,详解内存分布(P:图解及代码示例) |
您所在的位置:网站首页 › 工龄分布图 › C/C++:内存分配,详解内存分布(P:图解及代码示例) |
文章目录
内存分布内存分布图解内存分布说明常见的内存分布图
习题
首先这里有一个计算机分配内存的概念. 如下: 当内存开辟空间时, 内存的分配是从高位到低位当往内存存储数据时, 是从低位往高位存储注意:一般情况下内存都是连续开辟.
代码生成图: 我们先来看下面的一段代码和相关问题 int globalVar = 1; static int staticGlobalVar = 1; void Test() { static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof (int)*4); int* ptr2 = (int*)calloc(4, sizeof(int)); int* ptr3 = (int*)realloc(ptr2, sizeof(int)*4); free (ptr1); free (ptr3); } 1. 选择题: 选项: A.栈 B.堆 C.数据段 D.代码段 globalVar在哪里?____ staticGlobalVar在哪里?____ staticVar在哪里?____ localVar在哪里?____ num1 在哪里?____char2在哪里?____ pChar3在哪里?____ ptr1在哪里?____ 2. 填空题: sizeof(num1) = ____; 40 *char2在哪里?___ *pChar3在哪里?____ *ptr1在哪里?____ sizeof(char2) = ____; 5 strlen(char2) = ____; 4 sizeof(pChar3) = ____; 4 strlen(pChar3) = ____; 4 sizeof(ptr1) = ____; 4 内存分布图解内核空间是在高地址 1、 内存区域:栈、堆、全局区、常量区、代码区 栈:系统自动分配的空间,只要不特殊声明,就定义在栈区,函数的区域也在栈上。栈是向下增长的。(const 在栈里)堆:使用动态内存分配的方式可以申请堆空间,用完要手动释放。全局区:全局变量、静态变量(static)常量区:代码中的数字,字符等常量,例如’a’,—1.2等代码区:存放可执行代码,避免频繁的读硬盘。2、 A. 把高级语言翻译成机器语言 B. 把高级语言翻译成汇编语言 C. 把中间代码变换成依赖具体机器的目标代码 D. 把汇编语言翻译成机器语言 正确答案: C 答案解析 源代码-->预处理-->编译-->优化-->汇编-->链接–>可执行文件 汇编阶段把汇编语言代码/中间代码翻译成目标机器指令。 对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。(代码生成阶段) 代码生成阶段的主要任务是把中间代码(或经优化处理之后)变换成特定机器上的低级语言代码,它的工作有赖于硬件系统结构和机器指令含义。选项C正确。 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少? #include int main(){ long long a = 1, b = 2, c = 3; printf("%d %d %d\n", a, b, c); return 0; }A. 1,2,3 B. 1,0,2 C. 1,3,2 D. 3,2,1 正确答案 B 答案解析 注: printf()是一个库函数,C,C++中函数的参数是从右往左入栈的;从左往右出栈 栈的生长方向是从高往低的 小端模式是低位存储在低字节 %d格式输出的是4个字节大小,而long long为8个字节 所以,a=1,b=0,c=2 如下代码输出结果是什么? #include char *myString() { char buffer[6] = {0}; char *s = "Hello World!"; for (int i = 0; i |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |