我记得在php.net上阅读(虽然遗憾的是似乎找不到页面)PHP解释器可以以不同的方式运行 - 最常见的是,每次请求页面时,都会创建一个PHP解释器的实例,运行它当然,然后被销毁,以及与该特定页面调用相关的所有内存.显然,也可以允许所有内存延续,以便在将来的页面调用中再次使用它; 据我所知,基本上允许多个不同的PHP脚本访问和修改相同的对象,而不会在脚本完成后丢失它们.
或者至少,所以我记得.有没有道理呢?如果是这样,我该怎么设置它?
前几天我决定在组装时采取行动,我一直在玩基本的东西,比如从argv到stdout的打印.我找到了这个带有参数和所有内容的linux系统调用号码的绝佳列表,我很好奇为什么r10之前r8和之前用于参数r9.我已经找到各种奇怪的约定,关于什么可以用于什么和何时,如循环计数器如何进入rcx.有什么特别的原因r10被提升了吗?它更方便吗?
我可能也应该提到我出于好奇而对此感兴趣,而不是因为它引起了我的问题.
编辑:我发现这个问题很接近,引用了第124页的x64 ABI文档,其中注意到用户级应用程序使用的问题rdi, rsi, rdx, rcx, r8, r9.另一方面,内核使用r10而不是rcx破坏rcx和r11.这可能解释了如何r10在那里结束,但那么为什么要交换呢?
我在iframe中有一个带有designMode的富文本编辑器,可以对小块文本进行语法高亮显示.我希望它更新keyup上的突出显示,但是搞乱DOM会导致帧模糊,因此每次按下一个键时,插入符号都会消失,你不能再输入了.如果解析器可以记住插入符的位置,然后重新聚焦iframe并替换插入符号,那就不会有问题.我已经阅读了getSelection()它的亲戚,但显然onkeyup删除了选择,至少在Chrome中 - getSelection()在onkeyup内调用总是产生一个空选择.有没有解决的办法?
这就是我所拥有的:
<iframe>
<html>
<head>
<script>
function parse() {
if(window.getSelection().type != 'None') {
var range = window.getSelection().getRangeAt(0);
}
var text = document.body.textContent;
//Parse text, output is stored in newtext
document.body.innerHTML = newtext;
document.body.focus();
if(range) {
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
}
}
</script>
</head>
<body onload="document.designMode = 'on'; document.onkeyup = parse;">
Text entered appears here
</body>
</html>
</iframe>
Run Code Online (Sandbox Code Playgroud) 我一直在用C++编写一些操作文件的类.当我开始时,我让所有构造函数接受一个std::string被解释为文件名的参数,因为这很快捷.
std::fstream任何类使用的唯一函数是.open().我认为既然std::ofstream并且std::ostringstream两者都派生自std::ostream并且我只使用了std::ostream函数,那么让每个构造函数都适当地接受一个std::ostream或者std::istream参数,而不是将类绑定到文件上会好得多.
一个伟大的教科书例子,为什么多态是有用的.海湾合作委员会对此非常不满.这是我的代码的简化:
#include <iostream>
#include <fstream>
class Foo {
public:
Foo(std::istream&);
std::istream& input;
};
Foo::Foo(std::istream& is) {
this->input = is;
}
int main() {
std::ifstream is("test.txt");
Foo foo(is);
}
Run Code Online (Sandbox Code Playgroud)
在编译时g++ test.cpp,会产生以下各种各样的错误:
test.cpp: In constructor ‘Foo::Foo(std::istream&)’:
test.cpp:10:1: error: uninitialized reference member ‘Foo::input’ [-fpermissive]
In file included from /usr/include/c++/4.7/ios:43:0,
from /usr/include/c++/4.7/ostream:40,
from /usr/include/c++/4.7/iostream:40,
from test.cpp:1:
/usr/include/c++/4.7/bits/ios_base.h: In member function ‘std::basic_ios<char>& std::basic_ios<char>::operator=(const std::basic_ios<char>&)’: …Run Code Online (Sandbox Code Playgroud) 如何将void指针强制转换为double,保留存储在void指针中的确切二进制?我认为这可以用reinterpret_cast<double>(voidp),但g ++不允许我.我知道你可以将void指针转换为整数,所以我尝试过reinterpret_cast<double>(reinterpret_cast<long>(voidp)),但显然这也是无效的.sizeof(double)并且sizeof(void*)都是8,所以它不能是一个大小的东西.有什么我可以做到的吗?
编辑:在这种情况下,双指针没有指向,但是/是/ void指针 - 指针本身包含我想要的数据,它不指向我想要的数据.
我一直在学习AS3中的封装,并使用get/set函数来创建(或看起来)只读的变量.我可以使用实例变量,但不能使用静态变量.我发现了这一点,这似乎表明可以在静态属性上使用get/set函数,但编译器一直告诉我我有重复的函数声明.这基本上就是我正在使用的:
package {
public class Foo {
protected static var bar:int = 0;
public static function get bar():int {return bar;}
}
}
Run Code Online (Sandbox Code Playgroud) c++ ×2
64-bit ×1
assembly ×1
casting ×1
getselection ×1
html ×1
javascript ×1
linux ×1
php ×1
polymorphism ×1
reference ×1
selection ×1