有没有办法在ANSI C中打印指向函数的指针?当然这意味着你必须将函数指针强制转换为void指针,但似乎不可能?
#include <stdio.h>
int main() {
int (*funcptr)() = main;
printf("%p\n", (void* )funcptr);
printf("%p\n", (void* )main);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
$ gcc -ansi -pedantic -Wall test.c -o test
test.c:在函数'main'中:
test.c:6:警告:ISO C禁止将函数指针转换为对象指针类型
test.c:7:warning :ISO C禁止将函数指针转换为对象指针类型
$ ./test
0x400518
0x400518
它"工作",但非标准...
我定义我自己的版本concat
,myConcat
:
module Eh where
myConcat [] = []
myConcat ([]:os) = myConcat os
myConcat ((x:xs):os) = x : myConcat (xs:os)
(!!!) :: [a] -> Int -> a
xs !!! n | n < 0 = error "negative index"
[] !!! _ = error "index too large"
(x:_) !!! 0 = x
(_:xs) !!! n = xs !!! (n-1)
Run Code Online (Sandbox Code Playgroud)
如果我myConcat <some huge list> !! n
使用GHC解释器,它会以300MB/s的速度窃取我的内存,而且我必须在它召唤OOM杀手之前杀死它.请注意,我加载Eh
为"解释",我在加载之前不编译它.
code run in the GHC interpreter space leak? …
假设我们有这种形式,用户注入恶意代码的可能部分如下所示
...
<input type=text name=username value=
<?php echo htmlspecialchars($_POST['username']); ?>>
...
Run Code Online (Sandbox Code Playgroud)
我们不能简单地添加标签或javascript:alert(); call,因为value将被解释为一个字符串,而htmlspecialchars会过滤掉<,>,',",所以我们不能用引号关闭这个值.
我们可以使用String.fromCode(.....)来绕过引号,但我仍然无法弹出一个简单的警告框.
有任何想法吗?
我将此代码键入解释器并快速占用内存:
last [1..10^7] `seq` ()
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这需要超过O(1)空间.如果我这样做(这应该是相同的,因为Show强制弱头正常形式,所以seq是多余的?):
last [1..10^7]
Run Code Online (Sandbox Code Playgroud)
......工作正常
我无法在翻译之外重现这种情况.
这里发生了什么?
以下是一些测试用例:http: //hpaste.org/69234
注意事项:
wtf<n>
ghci.ghc --make wtf.hs && ./wtf
.last
可以替换sum
带有严格累加器的函数或在列表中找到最大元素的函数,并且仍然会发生空间泄漏$!
,而不是seq
.()
参数,因为我认为这可能是一个CAF问题.没有改变.Enum
,因为我可以用wtf5
它来重现行为,之后根本不会使用它Enum
.Num
,Int
或者Integer
,因为我可以重现的行为,而他们wtf14
和wtf16
.我尝试使用Peano算法重现问题,将列表和整数从等式中取出(在10 ^ 9的末尾取出),但遇到其他共享/空间泄漏问题,我在尝试实现时不明白*
.
在默认的安全管理器下,如果我创建一个ExecutorService(在这种情况下是ThreadPoolExecutor),我无法关闭它,shutdown()
只是调用checkPermission("modifyThread")
并因此立即死掉:
import java.util.concurrent.*;
class A {
public static void main( String[] args) {
Thread ct = Thread.currentThread();
System.out.println("current thread: " + ct);
ct.checkAccess(); // we have access to our own thread...
ThreadPoolExecutor tpe = new ThreadPoolExecutor(
1, // one core thread
1, // doesn't matter because queue is unbounded
0, TimeUnit.SECONDS, // doesn't matter in this case
new LinkedBlockingQueue<Runnable>(), /* unbound queue for
* our single thread */
new ThreadFactory() {
public …
Run Code Online (Sandbox Code Playgroud) 如果有一个可以丢弃的值,Haskell中的结果会被()
用来代替?
吗?
示例(目前无法想到除IO操作之外的任何其他内容):
mapM_ :: (Monad m) => (a -> m b) -> [a] -> m ()
foldM_ :: (Monad m) => (a -> b -> m a) -> a -> [b] -> m ()
writeFile :: FilePath -> String -> IO ()
Run Code Online (Sandbox Code Playgroud)
在严格的评估下,这是完全合理的,但在Haskell中,它只会使域更大.
也许有"未使用的参数"函数d -> a
是严格的d
(哪里d
是一个无约束的类型参数,并没有显示免费a
)?例如:seq
,const' x y = y
seq x
.
我开发了一个软件(使用C和Python),我想用加密狗保护它,这样复制和逆向工程变得足够困难.我的加密狗设备附带一个api,提供以下功能:
我可以在源代码中做些什么来使它变得更难破解.Dongle提供商建议,我应该在循环中或事件之后检查正确的加密狗存在,或者我应该以有效的方式使用加密狗存储器.但是怎么样?我不知道破解者是如何破解的.请说清楚.提前致谢.
PS:请不要建议混淆.我已经这样做了.
哪种解释语言无指针语言(IE:Python,Java,Perl,PHP,Ruby,Javascript等)都有手动内存管理?我不记得曾经听过一个.
解释语言的主要问题不是垃圾收集的非确定性延迟(或没有足够延迟时的空间复杂性)吗?那么为什么不写一些与Java完全相同的东西,但强制你手动释放内存?
编辑
我的意思是手动内存管理是语言将引用对象,您可以使用引用删除对象.
例:
Object a = new Object(); // a is a reference to the object
Object b = a; // b is a reference to the same object
a.method(); // fine
delete b; // delete the object referenced by b
a.method(); // null dereference exception
Run Code Online (Sandbox Code Playgroud)
那么有什么警告(除了内存泄漏)可能会出现像这个例子的语言?
我刚走过来,决定尝试一下Ada.缺点是语法和功能远离C++.所以我不得不喜欢各种各样的东西让这件事情起作用.
我的问题是,如果有更好的方法来做这个计算,我在这里做了什么
IF(B < 0.0) THEN
B := ABS(B);
X1 := (B / 2.0) + Sqrt( (B / 2.0) ** 2.0 + ABS(C));
X2 := (B / 2.0) - Sqrt( (B / 2.0) ** 2.0 + ABS(C));
ELSE
X1 := -(B / 2.0) + Sqrt( (B / 2.0) ** 2.0 - C);
X2 := -(B / 2.0) - Sqrt( (B / 2.0) ** 2.0 - C);
END IF;
Run Code Online (Sandbox Code Playgroud)
我有一些负数的问题,这就是为什么我做了一个IF语句并使用ABS()将它们转为正数.但奇怪的是它适用于另一种情况,这很奇怪......
有了Erlang的"让它崩溃"的理念,如果一个进程无法分配进行其操作所需的内存,人们就会期望整个VM不会崩溃.实际上,如果系统有一个启发式来杀死一些进程来释放一些内存,那么其他一些进程就会处理这个并恢复.根管理员可能不太可能被启发式杀死.
这与大多数现代流行语言形成鲜明对比,这些语言只会死或让操作系统选择做什么.
如何在Erlang中实际处理内存不足?
编辑:建立标记系统的人.不读这个.这不是你想要的.当我不知道RDBMS都有自己的优化方法时,我问过这个,只需使用简单的多对多方案.
我有一个发布系统,有数百万的帖子.每个帖子都可以有无数个与之关联的标签.
用户可以创建具有注释,创建日期,所有者等的标签.标签几乎就像一个帖子本身,因为人们可以发布关于标签的注释.
每个标记关联都有一个所有者和日期,因此我们可以看到谁添加了标记以及何时添加.
我的问题是如何实现这一点?它必须通过标签快速搜索帖子,或通过邮寄标签.此外,用户可以通过在字段中键入名称来为帖子添加标签,有点像谷歌搜索栏,它必须为您填写标签名称的其余部分.
我目前有3个解决方案,但不确定哪个是最好的,或者是否有更好的方法.
请注意,我没有显示笔记的布局,因为一旦我得到适当的标签解决方案,这将是微不足道的.
方法1.链接列表
post中的tagId指向tag_assoc中的链表,应用程序必须遍历列表,直到flink = 0
post: id, content, ownerId, date, tagId, notesId
tag_assoc: id, tagId, ownerId, flink
tag: id, name, notesId
Run Code Online (Sandbox Code Playgroud)
方法2.非规范化
tags只是一个VARCHAR或TEXT字段,包含tagId:ownerId的制表符分隔数组.它不能是固定的大小.
post: id, content, ownerId, date, tags, notesId
tag: id, name, notesId
Run Code Online (Sandbox Code Playgroud)
方法3. Toxi
(来自:http://www.pui.ch/phred/archives/2005/04/tags-database-schemas.html,这里也是一样的:标签或标签的推荐SQL数据库设计)
post: id, content, ownerId, date, notesId
tag_assoc: ownerId, tagId, postId
tag: id, name, notesId
Run Code Online (Sandbox Code Playgroud)
方法3提出了一个问题,迭代tag_assoc中每一行的速度有多快?
方法1和2应该通过post快速返回标签,但对于按标签发布的帖子,必须另外创建一个查找表.
我不得不担心的最后一件事是按名称优化搜索标签,我还没有完成.
我在这里制作了一个ASCII图:http://pastebin.com/f1c4e0e53
我创建了一个new ClassLoader
并使它定义一个new Class
,这意味着新类应该在一个新的命名空间中,它就是AFAIK.奇怪的是,当我调用Class.getPackage
新类时,它返回与通过调用getPackage
主命名空间中的任何其他类返回的完全相同的对象.
根据JVM规范:
类或接口的运行时包由包名称和类或接口的类加载器定义.
换句话说,如果在同一个包中有两个类,但是由不同的类加载器加载,则它们被认为是在不同的包中.(这也可以通过下面的测试用例中的反映来"确认".)
那么当我这样做时,我得到了getPackage
两个类的相同结果?
这是我的测试:
package pkg;
import java.io.*;
// Yes, you can try commenting this class, you'll get the same result.
class LoadedClass {
LoadedClass() {
System.out.println("LoadedClass init");
}
}
class MyClassLoader extends ClassLoader {
Class<?> defineClass(String name, byte[] b) {
return defineClass(name, b, 0, b.length);
}
}
class Main {
public static void main(String[] args) throws Exception {
MyClassLoader mcl = new MyClassLoader();
// load …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个有多个精灵的游戏,一旦你触摸精灵,它就会做点什么.
我的问题是z顺序问题,我的大多数精灵都是重叠的,当你触摸重叠的精灵时,后面的那个(我认为最低的z顺序)反应而不是前面的那个.
我需要了解更多关于cocos2d的z顺序.
如何在运行时更改z顺序?
谢谢!
haskell ×3
ghc ×2
java ×2
security ×2
ada ×1
c ×1
classloader ×1
database ×1
dongle ×1
erlang ×1
interpreter ×1
iphone ×1
jsr166 ×1
jvm ×1
math ×1
memory ×1
performance ×1
php ×1
scalability ×1
space-leak ×1
sql ×1
tags ×1
xss ×1