Tag: 内存

什么真正的平台将硬件端口映射到内存地址?

我有时会在某些平台上看到以下C或C ++代码的语句: int* ptr; *ptr = 0; 如果ptr碰巧存储了该端口映射到的地址,则可能导致写入硬件输入输出端口。 通常它们被称为“嵌入式平台”。 这些平台的真实例子是什么?

使用2D动态分配的字符串创建动态分配的结构

我正在尝试用字母网格扫描。 cases是字母网格的数量, r , c是每个网格的行数和列数。 我想我可以用里面的2D数组创建一个结构数组。 我已经在这个工作了几个小时了,它仍然给我带来问题: 警告: 警告C4477 (第12行) – ‘scanf_s’:格式字符串’%s’需要类型为’char *’的参数,但可变参数1的类型为’int’ 警告C4473 (第12行) – ‘scanf_s’:没有为格式字符串传递足够的参数 错误: 编译器错误C2274 编译器错误C2461 代码: scanf_s(“%d”, &cases); struct grid { char **grid; }; struct grid *grids = (struct grid*)malloc(cases * sizeof(struct grid)); for (i = 0; i < cases; i++) { scanf_s("%d %d", &r, &c); grids[i].grid = (char**)malloc(sizeof(char*) * […]

有哪些重构方法可以减少编译代码的大小?

我有一个需要新function的传统固件应用程序。 应用程序的大小已经接近设备的有限闪存容量,并且少数新function和变量将其推向了边缘。 打开编译器优化可以解决这个问题,但客户对这样做很谨慎,因为它们过去曾导致过失败。 那么,在重构C代码以产生更小的输出时,需要注意哪些常见的事情?

为什么CPU在字边界上访问内存?

我听到很多数据应该在内存中正确对齐,以提高访问效率。 CPU访问内存在字边界上。 因此,在以下场景中,CPU必须进行2次内存访问才能获得单个字。 Supposing: 1 word = 4 bytes (“|” stands for word boundary. “o” stands for byte boundary) |—-o—-o—-o—-|—-o—-o—-o—-| (The word boundary in CPU’s eye) —-o—-o—-o—- (What I want to read from memory) 为什么会这样? 什么是CPU的根本原因只能读取字边界? 如果CPU只能访问4字节字边界,则地址线应仅需要30位,而不是32位宽。 因为CPU的眼中最后2位始终为0。 添加1 更重要的是,如果我们承认CPU必须读取字边界,为什么边界不能从我想要读取的地方开始? 似乎边界在CPU眼中是固定的。 添加2 根据AndreyT的说法 ,似乎边界设置是硬连线的,它是由内存访问硬件硬连线的。 就这一点而言,CPU是无辜的。 非常感谢…

C语言中的标识符存储在哪里

只是感兴趣。 我正在修改我长期被遗忘的生锈的C知识,我想知道在哪里存储声明变量的标识符? 例如,如果我在main中声明以下char值1。 int main(){ char value1 = ‘A’; return 0; } 我知道char将被存储在堆栈框架中的堆栈中。 让我们说如果我们在value1上做了一个关于这个和value1的地址。 我们会得到像0xF37012(一个假设的数字)。 这将是值所在的位置,但标识符呢? 这与0xF37012有什么关联? 是否在主要的某个地方的堆栈frane? 或者所有标识符都存储在某个全局表或列表中?

JavaScript中Typed Arrays的优点是它们在C中的工作方式相同或相似吗?

我一直在使用JavaScript中的Typed Arrays 。 var buffer = new ArrayBuffer(16); var int32View = new Int32Array(buffer); 我认为JavaScript中的正常数组( [1, 257, true])性能较差,因为它们的值可能是任何类型,因此,在内存中达到偏移并非易事。 我原本以为JavaScript数组下标的工作方式与对象相同(因为它们有许多相似之处),并且基于哈希映射 ,需要基于散列的查找。 但我没有找到太多可信的信息来证实这一点。 所以,我假设Typed Arrays表现如此出色的原因是因为它们像C中的普通数组一样工作,它们总是被输入。 鉴于上面的初始代码示例,并希望获得键入数组中的第10个值… var value = int32View[10]; 类型为Int32 ,因此每个值必须由32位或4个字节组成。 下标是10 。 因此,该值在内存中的位置是 + (4 * 10) ,然后读取4个字节以获得总值。 我基本上只想确认我的假设。 我的想法是否正确,如果没有,请详细说明。 我检查了V8源代码 ,看看我是否可以自己回答,但我的C生锈了,我对C ++不太熟悉。

C中的自定义内存分配器/管理器? 哪种方法?

我正在寻找用c编写的一些(自定义)内存管理器/分配器并经历了一些文章, – 一些链接: IBM – 内部内存管理 Valgrind – 如何影响程序使用的每个字节的内存 堆栈溢出问题 – 编写自己的内存管理器 ned Productions – nedmalloc主页 两级隔离适合(TLSF) – 网站 维基百科 – 动态内存分配 Fourmilab – BGET内存分配器 我必须使用任何可用的沙箱来沙箱一个小的Web服务器,我在编写线程处理/分配方案的包装器时没有问题。 Apache WS使用内存池来处理内存,并且池不是持久的,它是基于请求的。 你们能提出什么建议吗? 一些好/最好的方法来解决这个问题? 我的要求如下; – (有界响应时间)分配和解除分配必须事先知道,即一些常数成本O(c),其中c是常数。 应该处理来自异构分配/解除分配大小或序列的碎片,我可以编写模式/包装器来提供相同的碎片。 真的很感谢你的帮助和想法!

“分段错误”与“运行时间”错误?

考虑一下这段片段: char *str = “hellow Ghost”; str[0] = ‘z’; printf(“%s”, str); 这是一个分段错误。 它是否也在运行时内存错误? 我通过分段故障理解的是:当您访问不属于您的内存时出现分段错误。 它基本上是为您创建的实用程序,可以在不让您破坏内存的情况下轻松完成工作。 分段错误涵盖了多少和什么样的内存错误以及调用它来检查指针或引用处理内存的错误。 由于逻辑不正确,也会发生运行时错误。 除此之外,运行时错误和关于内存的分段错误之间是否存在任何差异。

使用C,从textFile打印出一个数组

我正在尝试创建一个从纺织品中读取的代码,然后将数据存储到内存中,打印到屏幕上以便用户可以读取它,但它仍然保存在内存中,以便您可以将其用于其余部分该计划.. 这是纺织品的样本 75 nevermind nvm not much nm no problem np people ppl talk to you later ttyl because cuz i don’t know idk as soon as possible asap yeah ya how are you hru you 列表继续,它总共有150个单词,如果包含第一个数字,则为151行。 75用于告诉你有多少对。 无论如何,这是我到目前为止编写的代码,它使用这个结构 typedef struct { char *English; char *TextSpeak; }Pair; 我到目前为止编写的代码是: FILE *infile =fopen(“dictionary.txt”,”r”); int phraseCounter; fscanf(infile, “%i”, […]

C ++为POD对象赋值

所以我读到了普通旧数据类(POD) ,并决定让我的结构POD来保存数据。 例如,我有 struct MyClass { int ID; int age; double height; char[8] Name; }; 显然,要为结构赋值,我可以这样做: MyClass.ID = 1; MyClass.age = 20; … 但是,无论如何都要分配原始数据,而不知道每个字段的名称? 例如,我的程序检索每列的字段值,并且我想将值赋给结构,因为我不知道字段的名称。 MyClass c; while (MoreColumns()) { doSomething( c , GetNextColumn() ); //GetNextColumn() returns some value of POD types } 我假设有使用memcpy或std :: copy的方法,但不知道如何开始.. 对不起,如果问题有点不清楚。