小编Tal*_*yed的帖子

"编译时分配的内存"究竟意味着什么?

在C和C++等编程语言中,人们经常提到静态和动态内存分配.我理解这个概念,但短语"所有内存在编译期间被分配(保留)"总是让我感到困惑.

据我所知,编译将高级C/C++代码转换为机器语言并输出可执行文件.如何在编译文件中"分配"内存?是不是内存总是在RAM中分配所有虚拟内存管理的东西?

根据定义,内存分配不是运行时概念吗?

如果我在我的C/C++代码中创建一个1KB静态分配的变量,那么这会增加可执行文件的大小吗?

这是在"静态分配"标题下使用该短语的页面之一.

回归基础:记忆分配,走下历史

c c++ memory memory-management terminology

149
推荐指数
8
解决办法
3万
查看次数

如何编写适当的CPU利用率?

跟我说,这可能有点难以解释清楚.我试图了解如何编写仅使用所需CPU数量的程序.解释起来有点混乱,所以我只想用一个真实的例子.

我制作了一个带有无限主游戏循环的俄罗斯方块游戏.我把它限制在40 fps.但是循环仍然每秒执行数千甚至数百万次.它只是在经过足够的时间后将其限制为40 fps.

由于我有一个4核CPU,当我运行游戏时,一切都很好,游戏运行良好.但游戏过程的CPU使用率保持在25%.这是预期的,因为它是一个无限循环并持续运行.

然后我在线阅读为主循环添加1 ms的延迟.这立即将使用量减少到约1%或更低.这很好,但现在我故意每个循环等待1毫秒.它的工作原理是因为我的主循环执行时间少得多,1ms延迟不影响游戏.

但是,如果我制作更大的游戏呢?具有更长和更多处理器密集循环的游戏.如果我需要1ms时间片来顺利运行游戏,该怎么办?然后,如果我删除延迟,处理器将再次跳到25%.如果我添加延迟,游戏将会很慢并且可能会有一些延迟.

在这种情况下,理想的解决方案是什么?真实游戏/应用程序如何编码以防止出现此问题?

c c# c++ language-agnostic performance

4
推荐指数
1
解决办法
324
查看次数

getc()不返回carrige返回'\ r'字符

我有一个带有一些示例文本的文本文件"hello.txt".当我在十六进制编辑器中打开文件时,我可以看到换行符的\ r \n字符.但是当我在带有getc()的C程序中读取文件时,\ r \n会以某种方式消失,我只会看到\n字符.

我试图在线搜索和stackoverflow但没有运气.

hello.txt的

Sample
File
Run Code Online (Sandbox Code Playgroud)

码:

#include <stdio.h>

int main()
{
    FILE *fp;
    fp = fopen("hello.txt", "r");

    int character = 0;

    while( (character = getc(fp)) != EOF)
    {
        printf("%.2X ", character);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

53 61 6D 70 6C 65 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)

从十六进制编辑器看到的文件:

53 61 6D 70 6C 65 0D 0A 46 69 6C 65
Run Code Online (Sandbox Code Playgroud)

可以看出,使用getc()函数时,0D0A仅输出0A.

为什么getc()会避免'\ r'字符?如何让它返回给定文件中的EXACT数据,即没有任何转换\ r \n到\n?

c stdio

1
推荐指数
1
解决办法
154
查看次数