哪一个更快 -
val = val*10;
Run Code Online (Sandbox Code Playgroud)
要么
val = (val<<3) + (val<<2);
Run Code Online (Sandbox Code Playgroud)
imul与移位指令相比,需要多少个时钟周期?
我们的一个PyQt应用程序抛出一个关于ICEAuthority的错误,如下所示并退出 -
ICE默认IO错误处理程序执行exit(),pid = 11281,errno = 4
在查看跟踪时,我们看到以下情况 -
write(25, "\1\0\3\200\3\0\0\0\3\0\0\0\t\0\0\0\10\0\0\0\1\0\0\0\377rtStyle", 32) = 32
read(25, 0x16a67f0, 8) = ? ERESTARTSYS (To be restarted)
— SIGCHLD (Child exited) @ 0 (0) —
write(6, "\0", 1) = 1
rt_sigreturn(0x2) = -1 EINTR (Interrupted system call)
write(2, "ICE default IO error handler doi"..., 69) = 69
Run Code Online (Sandbox Code Playgroud)
这看起来像ICEAuthority文件读取操作在处理我们从PyQt应用程序生成的其中一个进程的SIGCHLD后无法重新启动.在谷歌搜索,有很多关于ICEAuthority文件失败的报告,人们建议重新启动系统,删除.ICEAuthority文件,或取消设置SESSION_MANAGER.我们倾向于暂时在PyQt应用程序中取消设置SESSION_MANAGER.但我想了解为什么操作无法重新启动ICEAuthority文件的读取操作.这是gnome会话代码中的错误吗?有人知道吗?
另外我想提一下,我尝试将SA_RESTART设置为false,以便SIGCHLD句柄重新启动操作.这无效.
请在下面找到我们的系统详情 -
Linux nyc-nx-l01.schrodinger.com 2.6.32-358.23.2.el6.x86_64#1 SMP Wed Oct 16 18:37:12 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
CentOS版本6.4(最终版)
我们有很多产品,每个产品的应用程序都有一些常见的DLL.现在我们将每个常见的DLL复制到每个产品的bin目录中,并将它们视为私有程序集.这不必要地增加了每个产品的msi大小,当DLL中出现问题时,我们必须构建包含DLL的每个产品的msi并进行部署.
反正是指示产品应用程序使用公共私有目录来加载DLL [使用manifest scheme ..]?[注意:将私有目录添加到PATH env将不会提供解决方案,就好像SYSTEM目录中存在具有相同名称的DLL一样,这将获取对我们的私人目录的特权]
-Kartlee
下面的代码非常适合从32位应用程序获取32位进程的命令行字符串,从64位应用程序获取64位进程,从64位应用程序获取32位进程.如果我尝试从32位应用程序使用64位进程,这将会中断.原因是PROCESS_BASIC_INFORMATION和地址大小的结构大小差异.所以这是我的问题 -
1)在进程黑客(http://processhacker.sourceforge.net/forums/viewtopic.php?f=15&t=181)中使用wow64函数的建议似乎不起作用并且失败并出现以下错误 -
从A68291A0004028E0读取ProcessParameters地址时出现NtWow64ReadVirtualMemory64错误:8000000D
有没有人试过这个并且可以成功获取信息?我在他们的论坛上发布了同样的问题.
2)是否有其他方法可以查询可以可靠地用于x86和x64的peb信息?
int get_cmdline_from_pid( DWORD dwPid, char** cmdLine )
{
DWORD dw, read;
HANDLE hProcess;
NtQueryInformationProcess* pNtQip;
PROCESS_BASIC_INFORMATION pbInfo;
UNICODE_STRING cmdline;
WCHAR* wcmdLine;
*cmdLine = NULL;
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPid );
if( !hProcess )
return FALSE;
pNtQip = (NtQueryInformationProcess*) GetProcAddress(GetModuleHandle("ntdll.dll"),
"NtQueryInformationProcess");
if(!pNtQip)
return FALSE;
pNtQip(hProcess, PROCESSBASICINFOMATION, &pbInfo, sizeof(pbInfo), NULL);
#ifdef _WIN64
ReadProcessMemory(hProcess, pbInfo.PebBaseAddress + 0x20, &dw, sizeof(dw),
&read);
#else
ReadProcessMemory(hProcess, pbInfo.PebBaseAddress + 0x10, &dw, sizeof(dw),
&read);
#endif
#ifdef _WIN64 …Run Code Online (Sandbox Code Playgroud) 我在Windows中设置了TEST=abc£一个使用Windows-1252代码页的环境变量.现在,当我运行Perl程序时,test.pl这个环境值正确.
当我调用另一个Perl代码- test2.pl从test1.pl无论是system(..)或Win32::Process,环境自带乱码.
有人可以提供信息,为什么会这样,以及解决它的方法?
perl我使用的版本是5.8.
如果我的理解是正确的,在perl内部使用utf-8,那么初始过程 - test1.pl从Windows-1252→ 收到它utf-8.当我们调用另一个进程时,我们应该转换回Windows-1252代码页吗?
我可以使用哪些Windows和Linux系统工具来确定对齐问题,缓存未命中以及与Visual C++和GCC生成的代码相关的其他参数?我可以使用这些工具来确定结构的对齐方式,这样我就可以避免编译器生成的填充吗?
Linux内核调度程序是init进程的一部分吗?我的理解是它是内部管理的内核线程的一部分,用户不能通过top或ps看到.请纠正我的理解.
是否可以通过任何内核调试器查看标准内核线程,以查看标准线程如何占用cpu活动?
-Kartlee
对于32位Windows,以下_SYSTEM_PROCESSES结构声明(系统信息类5)ZwQuerySystemInformation可以很好地用于构建进程树。
typedef struct _SYSTEM_PROCESSES
{ // System Information Class 5
ULONG NextEntryDelta;
ULONG ThreadCount;
ULONG Reserved1[6];
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ProcessName;
ULONG BasePriority;
ULONG ProcessId;
ULONG InheritedFromProcessId;
ULONG HandleCount;
ULONG Reserved2[2];
} SYSTEM_PROCESSES, * PSYSTEM_PROCESSES;
Run Code Online (Sandbox Code Playgroud)
另一方面,它在64位Windows中无法正常运行。如果我声明ProcessId为ULONG64,则用于的数据ProcessId正确。为上述结构定义的数据类型是否适用于Windows-64?
在 Windows 中获取操作系统名称、操作系统版本在以下方面哪一个更好 -
systeminfo 还是 wmic 命令?我想避免在 C 中使用 OSVersionInfoEx,因为必须对营销名称检测进行硬编码,并且如果引入新风格的 Windows,则会增加维护工作。请分享您的意见。
当您使用以下标志进行编译时,VS 2010中的代码崩溃,如果添加/ GF-或删除opimization标志,它们不会崩溃.崩溃发生在汇编代码中,该代码转换为'if(path [i] =='/')'.我喜欢理解编译器在这里做的优化并导致崩溃.期待一些指示.
-Karthik
cl.exe /MD /O2 test.c
// TEST.C
#include <stdio.h>
#include <string.h>
void testpath(char* path, int bufsiz)
{
int i;
printf("%p\n", path);
for( i=0; i < strlen(path); i++ ) {
if( path[i] == '/' ) {
path[i] = '\\';
}
}
}
int main()
{
const char* path = "testexport.prj";
char *path1 = "testexport.prj";
printf("%p\n", path);
printf("%p\n", path1);
testpath(path, 1024);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试测试为 Visa 中的符号链接提到的 31 重解析点限制。但是我无法通过以下列出的任何案例进行复制。有人可以指导吗?
1) 在目录 c:\temp\testlink 中为驻留在 c:\temp\testlink 中的可执行文件创建了 36 个符号链接。
2) 在目录 c:\temp\testlink 中创建了 36 个符号链接,指向位于 c:\temp\testlink 中的 36 个不同的可执行文件。
3) 在目录 c:\temp1 中为驻留在 c:\temp\testlink 中的 36 个不同的可执行文件创建了 36 个符号链接。
此限制在 Windows 7 和 2008 中有何作用?
-卡蒂克
我喜欢将每个线程的stdout输出重定向到文件.以下代码将所有线程输出重定向到单个文件 -
int fd = open(<filename_threadid.txt>, <flags>)
_dup2(fd, 1)
Run Code Online (Sandbox Code Playgroud)
我应该如何恢复原始标准输出,以便下一个线程能够可靠地将其标准输出映射到filename_threadid?