我参与了其中一个挑战,你试图生成尽可能小的二进制文件,所以我在没有 C或C++运行时库(RTL)的情况下构建我的程序.我没有链接到DLL版本或静态版本.我甚#include
至没有头文件.我有这个工作正常.
有些RTL函数memset()
可能很有用,所以我尝试添加自己的实现.它在Debug构建中工作正常(即使对于编译器生成隐式调用的那些地方memset()
).但是在Release版本中,我得到一个错误,说我无法定义内部函数.您可以看到,在发布版本中,内部函数已启用,并且memset()
是内在函数.
我希望memset()
在我的发布版本中使用内在函数,因为它可能内联,比我的实现更小,更快.但我似乎是一个陷阱22.如果我没有定义memset()
,链接器会抱怨它是未定义的.如果我确定它,编译器会抱怨我无法定义内部函数.
有没有人知道定义,声明,#pragma
编译器和链接器标志的正确组合,以获得内部函数而不会拉入RTL开销?
Visual Studio 2008,x86,Windows XP +.
为了使问题更具体:
extern "C" void * __cdecl memset(void *, int, size_t);
#ifdef IMPLEMENT_MEMSET
void * __cdecl memset(void *pTarget, int value, size_t cbTarget) {
char *p = reinterpret_cast<char *>(pTarget);
while (cbTarget > 0) {
*p++ = static_cast<char>(value);
--cbTarget;
}
return pTarget;
}
#endif
struct MyStruct {
int foo[10];
int bar;
};
int main() …
Run Code Online (Sandbox Code Playgroud) 我很喜欢demoscene,特别是那些小的4K exefiles.它们没有任何依赖关系,除了已经在Windows中找到的文件,它们展现出令人敬畏的编程能力:3D图形+声音,全都是4K.
这怎么可能?他们使用的语言是什么?贸易,最佳实践和重要网站的工具有哪些?
注意:请回答,如果你知道你在说什么,无用的答案,如"嗯,我猜他们使用asm"将被downvoted.(这不是反对asm,asm很棒)
概述
我试图找出如何使用某种DFS迭代算法遍历有向循环图.这是我目前实现的一个小版本(它不涉及周期):
class Node(object):
def __init__(self, name):
self.name = name
def start(self):
print '{}_start'.format(self)
def middle(self):
print '{}_middle'.format(self)
def end(self):
print '{}_end'.format(self)
def __str__(self):
return "{0}".format(self.name)
class NodeRepeat(Node):
def __init__(self, name, num_repeats=1):
super(NodeRepeat, self).__init__(name)
self.num_repeats = num_repeats
def dfs(graph, start):
"""Traverse graph from start node using DFS with reversed childs"""
visited = {}
stack = [(start, "")]
while stack:
# To convert dfs -> bfs
# a) rename stack to queue
# b) pop becomes pop(0)
node, parent …
Run Code Online (Sandbox Code Playgroud) 我做了一些音频编程.
没关系尝试将其压缩到64k或4k.
我甚至不知道如何在程序上合成上述演示.
我意识到demoscene在某种程度上是一个地下的黑暗.但是,有没有关于创建其中一个的好的教程/演练?就像是:
"知道OpenGL/GLSL/C++/C的Dummies的Demoscene"
我也意识到有一些工具包旨在压缩代码 - 但对我来说,压缩目前并不重要.我很乐意仅仅学习如何创造这样的东西.
任何人都可以建议一步一步地创建一个演示场景的好教程/演练,对于有足够技术背景的人来理解各个步骤(但却无法看到整个图片).
谢谢.
我听说旧的街机侧滚动游戏使用特定的编程黑客来实现高性能的侧滚动.
据我所知,多年前这些机器的功能还不足以像现在这样完成每一帧的整个屏幕重绘.有些技术,例如脏矩形,可以在背景静止且只有精灵移动时最小化重绘所需的屏幕区域.
上述方法仅在背景不变时才起作用(因此大多数屏幕像素保持静止).
垂直滚动游戏,比如老式的射击游戏,由于滚动,背景会改变每一帧,因此有点困难.然而,人们可以利用像素被馈送到显示器的方式(逐行).我想可以使用更大的缓冲区并将数据指针移动到每一帧"向下"一些线条,这样它将从另一个位置开始重绘,从而给人一种平滑滚动的印象.仍然只需要重绘精灵(以及屏幕边缘的一些背景),这是一个严重的优化.
然而,对于侧滚动游戏来说,事情并不那么简单明了.尽管如此,我知道某个人,在过去的某个地方,虽然有一个优化(有一些限制)允许旧机器水平滚动背景而不是每帧重绘它.
IIRC它被用于许多旧游戏,主要是80年代的节拍,以及demoscene制作
你能描述一下这种技术并为其作者命名吗?
我正在寻找一些很好的教程,让我开始进行演示编码.我有一些CG的背景,但这都是理论上的.
有很多常规的3D编程教程,但我特别想找一些旧学校的2D东西.
我看过一些程序显示了带有音轨的惊人高度详细的3D场景,但令我震惊的是它们都小于64kB!这些程序如何运作?
怎么可能在一个64kb的编译exe中,这些程序可以生成如此疯狂的视觉效果,并配有匹配的音乐?
一个例子:Ars Nova By Phantom Lord(演示运行的YouTube视频)
这个程序的大小只有64kb!他们是怎么做到的?
他们在DirectX中使用某些预先存在的对象,着色器等等吗?
他们甚至用什么语言?这种东西有某种指导吗?
编辑:另一个令人兴奋的演示.怎么样?
http://www.scene.org/file.php?file=/demos/groups/farb-rausch/fr08_final.zip&fileinfo
编辑:更多的demoscene东西.
我找到了一些链接到这样的东西的组,他们发布了一个名为.werkkzeug1的产品和一些压缩和音频工具,但我仍然无法弄清楚它是如何可能的.他们甚至用96kb进行了一场比赛.
当我在youtube上观看demoscene视频时,作者经常吹嘘他们的文件大小是64kb或更少,有些只有4kb.当我用C++编译一个非常基本的程序时,可执行文件总是至少90kb左右.这些演示是完全用汇编写的吗?我的理解是,demomakers也使用了c/c ++.
demoscene ×9
3d ×2
c++ ×2
2d ×1
algorithm ×1
assembly ×1
compression ×1
demo ×1
filesize ×1
graphics ×1
intrinsics ×1
memset ×1
python ×1
python-2.7 ×1
visual-c++ ×1