【问题标题】:Are memory addresses in assembly language statically allocated at once?汇编语言中的内存地址是一次静态分配的吗?
【发布时间】:2015-05-15 11:32:24
【问题描述】:

我想编写一个 C 程序,它分配 20,000 个内存行,每行包含 8 个字节,并在 2500 到 24999 范围内标记。该程序实际上模拟了一个简单的汇编语言 IDE。所有 20,000 条内存线可能会或可能不会一次使用。建议我如何为 C 程序中的这些位置分配内存。它应该是静态分配吗? 访问http://screencast.com/t/69T7u0avH

【问题讨论】:

  • 1) 什么是“内存线”?你的意思是要分配 20000 * 8 字节?
  • 2) “标记在 2500 和 24999 范围内”是什么意思?
  • 3) “如何为这些位置分配内存”是什么意思?
  • 我不想让您气馁,但是您提出问题的方式让我想知道这是否可能超出您的范围......
  • @Mark Segal,请查看screencast.com/t/69T7u0avH

标签: c assembly memory-management static allocation


【解决方案1】:

试试

unsigned char (*ptrtomem)[8];
unsigned char (*ptr)[8];
/* ... */
    ptrtomem = malloc(20000*8);
    ptr = ptrtomem-2500;
/* use ptr[2500][] to ptr[24999][] */
/* when done */
    free(ptrtomem);

如果你想在堆栈外分配,或者使用 _alloca()(或 alloca(),取决于编译器)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多