C 中的内存管理 - 内存槽的分配

问题描述 投票:0回答:1

亲爱的 Stack Overflow 家人 - 新年快乐!!!祝大家度过愉快的时光。

我需要帮助来学习 C 语言的内存管理(也许还有通用计算)。一些参考书会很棒。以下所有问题均特定于 C 编程。

  1. 内存地址是编译时还是执行时分配的?我的印象是 尽管地址是在执行期间分配的,但大小和偏移量是在编译期间定义的。非常感谢您的评论。
  2. 上述问题的另一个具体情况 - 假设我们定义了一个 char 数组。对于这种数据类型,我们只需使用指向第一个元素的指针来访问数组。我需要自己确定 - 指针是检索数据(数组的所有元素)所需的唯一源 - 即,当我们尝试读取数组时,我们只访问第一个元素,并读取直到到达第一个 null特点?或者也许有一个单独的寄存器显示数组长度,这样我们就知道在哪里停止。又是在编译中定义的还是在执行中定义的?
  3. 除了上面之外,我假设我们确实使用寄存器来记录使用的内存槽 - 因此当我们定义下一个数据类型时,我们需要知道哪些槽是空闲的。 只是需要一些指导,或者一些参考资料,这方面的书籍。

提前致谢, 迈赫迪

没有具体问题 - 只是需要建议。

c dynamic-memory-allocation
1个回答
0
投票

C中有栈和堆。 堆栈上的内存是静态分配的。例如,

char c[2] = { 'c', 'q'};
分配在堆栈上。 但,
char* c = malloc(sizeof(char)*2);
分配在堆上。 以下是在 C 中迭代字符串文字的方法

char str[] = "example";
char *ptr = str;
while(*ptr != '\0') { // *ptr dereferences the pointer
    printf("%c", *ptr); 
    ptr++; 
}

内存分配:编译器不使用寄存器来跟踪空闲内存槽。内存管理是在运行时完成的。 对于动态分配,使用 malloc() 和 free() 等函数来请求和释放内存。 静态/局部变量的内存是自动管理的 - 在范围内分配,在范围外时释放。

© www.soinside.com 2019 - 2024. All rights reserved.