在C和C++等编程语言中,人们经常提到静态和动态内存分配.我理解这个概念,但短语"所有内存在编译期间被分配(保留)"总是让我感到困惑.
据我所知,编译将高级C/C++代码转换为机器语言并输出可执行文件.如何在编译文件中"分配"内存?是不是内存总是在RAM中分配所有虚拟内存管理的东西?
根据定义,内存分配不是运行时概念吗?
如果我在我的C/C++代码中创建一个1KB静态分配的变量,那么这会增加可执行文件的大小吗?
这是在"静态分配"标题下使用该短语的页面之一.
跟我说,这可能有点难以解释清楚.我试图了解如何编写仅使用所需CPU数量的程序.解释起来有点混乱,所以我只想用一个真实的例子.
我制作了一个带有无限主游戏循环的俄罗斯方块游戏.我把它限制在40 fps.但是循环仍然每秒执行数千甚至数百万次.它只是在经过足够的时间后将其限制为40 fps.
由于我有一个4核CPU,当我运行游戏时,一切都很好,游戏运行良好.但游戏过程的CPU使用率保持在25%.这是预期的,因为它是一个无限循环并持续运行.
然后我在线阅读为主循环添加1 ms的延迟.这立即将使用量减少到约1%或更低.这很好,但现在我故意每个循环等待1毫秒.它的工作原理是因为我的主循环执行时间少得多,1ms延迟不影响游戏.
但是,如果我制作更大的游戏呢?具有更长和更多处理器密集循环的游戏.如果我需要1ms时间片来顺利运行游戏,该怎么办?然后,如果我删除延迟,处理器将再次跳到25%.如果我添加延迟,游戏将会很慢并且可能会有一些延迟.
在这种情况下,理想的解决方案是什么?真实游戏/应用程序如何编码以防止出现此问题?
我有一个带有一些示例文本的文本文件"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?