嵌入式面试题4

13.进程的内存分配,按低地址到高地址系统地讲述一下

分配4G的虚拟空间,用多少占用多少,然后1G内核。

进程的内存空间从低地址到高地址内存布局依次是: 保留区 –> 文本段(包含程序和字符串常量)–>初始化的变量(.data,包含全局变量和静态变量)—>未初始化的变量(.bss,包含全局变量和静态变量)—>堆—>共享库或mmap—>栈–>命令函参数(main函数的参数)–>环境变量—>内核空间

  • 栈向低地址推
  • 堆向高地址推
  • malloc的时候(堆)
    • brk,将堆的最高地址往高出推,只能高地址释放,低地址才能释放
    • mmap,随便释放,找一块空闲的虚拟内存

虚拟内存解决了一个物理空间不连续问题,将断断续续的物理内存映射到虚拟内存上,起到看起来是连续的一段空间。

1、brk是将堆的最高地址指针_edata往高地址推;

2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。

     这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。

缺页中断===》一页=4096字节=4KB(注意是Byte,1B=8bit)

14.C语言如何面向对象

多态

#include "stdio.h"

typedef struct Person{
    char *name;
    void (*eat)();
}Person;

void fun1(){
    printf("student eat!\r\n");
}
void fun2(){
    printf("teacher eat!\r\n");
}
int main(){
    Person student={"student",fun1};
    Person teacher={"teacher",fun2};

    student.eat();
    teacher.eat();
}

15.const 用法

const 右边靠近谁,谁就不可变,靠近*就是指向的不可变,靠近变量命,就是该变量不可变


const int *p; //cons
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值