AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[windows](coding)

Martin Hope
Zebrafish
Asked: 2025-04-28 21:58:16 +0800 CST

为什么 Windows 只允许 GPU 使用一半的 RAM?

  • 5

以下是 Vulkan Capability 查看器在我的计算机上显示的内容:

MEMORY HEAP 0
    DEVICE SIZE 8321499136
    FLAGS
        DEVICE_LOCAL_BIT
        MULTI_INSTANCE_BIT

    MEMORY TYPE 0
        DEVICE_LOCAL_BIT
    MEMORY TYPE 1
        DEVICE_LOCAL_BIT

MEMORY HEAP 1
    DEVICE SIZE 16760438784
    FLAGS
    NONE

    MEMORY TYPE 0
        HOST_VISIBLE_BIT
        HOST_COHERENT_BIT
    MEMORY TYPE 0
        HOST_VISIBLE_BIT
        HOST_COHERENT_BIT

堆 0 是我的 GPU 设备,有 8GB 内存。堆 1 应该是我的 CPU 内存。我的 CPU 内存是 32GB,在 Windows 的任务管理器中也显示为 32GB,但在 Vulkan 的内存堆描述中,只有一半(16GB)显示。我查找了原因,并在 Microsoft 页面上的“计算图形内存”页面中找到了:

在 VidMm 向客户端报告准确的数据之前,它必须首先计算显存的总量。VidMm 使用以下内存类型和公式来计算显存数量:

系统总内存

This value is the total amount of system memory accessible to the operating system. Memory that the BIOS allocates doesn't appear in this number. For example, a computer with a 1 GB DIMM (1,024 MB) that has a BIOS that reserves 1 MB of memory appears to have 1,023 MB of system memory.

可供图形使用的总系统内存

This value is the total amount of system memory that is dedicated or shared to the GPU. This number is calculated as follows:
C++ 

图形可用系统内存总量 = MAX((系统内存总量 / 2), 64MB)

链接在这里。

我在想这是为什么。你的内存只有一半可以同时使用 Vulkan 和 DirectX,或者图形 API?这显然是 VidMm 报告的。我不知道 VidMm 是什么,但 DirectX 或 Vulkan 都会参考这个来查看有多少可用内存,结果它总是报告只有一半的内存?

就我而言,我有一个 8GB 的​​独立显卡,报告显示内存正确,但系统内存显示只有实际内存的一半,也就是 32GB 除以 2。如果是核显会怎么样?设备只能使用系统内存的一半?也就是说只能使用一半的设备内存?这种情况只在 Windows 上出现,现在也出现在其他操作系统上了?

windows
  • 1 个回答
  • 38 Views
Martin Hope
Masterspiece
Asked: 2025-04-28 20:06:47 +0800 CST

如何通过 Powershell 创建系统环境变量?[重复]

  • 7
这个问题已经有答案了:
如果环境变量不存在,如何在 PowerShell 中设置它? (3 个回答)
2天前关闭。

我想创建一个存储于系统范围内的环境变量。

我在 Powershell 中使用过的内容:

$Env:MyVar = 'Some value'

我gci Env:可以确认,该变量已成功创建。但是,Windows(Win11)的“高级系统设置”中仍然缺少该变量。

我该如何设置才能让它在菜单中可见?

windows
  • 1 个回答
  • 59 Views
Martin Hope
TravelWhere
Asked: 2025-04-28 17:51:26 +0800 CST

如何在 Windows 中获取文件的 MD5 Hash?

  • 6

如何在 Windows 中使用命令行获取文件的 md5 哈希值?我只想要原始的 MD5 哈希值,不包含任何额外的文本。我尝试使用 chatgpt 命令,但它给出的命令只起到了一半的作用。

for /f "skip=1 tokens=1" %a in ('certutil -hashfile "path\to\your\file" MD5') do @echo %a & goto :done

它仍然打印CertUtil: -hashfile command completed successfully.我不希望它出现的内容

windows
  • 2 个回答
  • 74 Views
Martin Hope
vkapadia
Asked: 2025-04-26 02:16:53 +0800 CST

关闭 Powershell 但不关闭 Exe

  • 6

我在 Windows 11 上。我需要用 Powershell 运行一个程序。这个程序有自己的 UI。我希望能够在不关闭程序的情况下关闭 Powershell 窗口。但是无论我怎么做,只要我关闭 Powershell 窗口,程序就会关闭。即使使用 Start-Process 运行该程序,Powershell 窗口关闭后,程序仍然会关闭。

如果我使用 Powershell 运行 Powershell,使用 Start-Process 打开 Powershell 中的程序,然后退出该 Powershell,它仍然保持打开状态。但是,一旦我关闭原始 Powershell 窗口,程序就会关闭。

windows
  • 1 个回答
  • 39 Views
Martin Hope
TravelWhere
Asked: 2025-04-21 08:28:21 +0800 CST

如何在 Windows 上自动提取子文件夹中的 cbz?

  • 5

我有一个包含一堆子文件夹的目录,每个子文件夹都包含一个 cbz 文件。

  1. 提取每个 .cbz 文件。
  2. 如果提取创建了子文件夹,请将其内容移动到 .cbz 文件的文件夹中。
  3. 删除原始 .cbz 和提取的子文件夹。

我该如何在 Windows Server 2022 上执行此操作?chatgpt 给我一个损坏的 Powershell 脚本。我运行它时它立即关闭了。

$sevenZipPath = "C:\Program Files\7-Zip\7z.exe"  # Change this if 7z.exe is not in your PATH

Get-ChildItem -Recurse -Filter *.cbz | ForEach-Object {
    $cbzFile = $_.FullName
    $baseFolder = $_.DirectoryName
    $tempFolder = Join-Path $baseFolder ([System.IO.Path]::GetFileNameWithoutExtension($_.Name))

    # Extract to a subfolder
    & $sevenZipPath x $cbzFile "-o$tempFolder" -y

    # Move everything up one level
    Get-ChildItem -Path $tempFolder -Recurse | ForEach-Object {
        $targetPath = Join-Path $baseFolder $_.Name

        if (-not (Test-Path $targetPath)) {
            Move-Item $_.FullName -Destination $targetPath
        } else {
            Write-Host "Skipping '$($_.Name)' — already exists in $baseFolder"
        }
    }

    # Clean up
    Remove-Item $cbzFile -Force
    Remove-Item $tempFolder -Recurse -Force
}
windows
  • 3 个回答
  • 55 Views
Martin Hope
Marcel V.
Asked: 2025-04-08 03:20:03 +0800 CST

多线程环境中的多个嵌入式 Perl 实例

  • 9

目前,我正在开发一个 ASP.NET 应用程序,由于一些遗留问题,该应用程序需要执行一些 Perl 脚本。为此,我编写了一个使用嵌入式 Perl API 的小型 C++ 库。该库只有一个(C)入口点,允许 C# 代码在传递命令行参数和环境变量的同时执行脚本。此环境变量允许 C# 代码模拟对 Perl 脚本的 CGI 调用。

现在我发现了一些奇怪的事情。C# 应用程序允许(最大数量的)并发 Perl 脚本执行。每次调用都会创建一个不同的环境,并将其传递给我的 C++ 库,然后 C++ 库会将此环境传递给perl_parse函数。然后我注意到,Perl 脚本看到的实际环境与传递的实际环境不匹配,而似乎是旧副本。所以我的问题是,我是不是忽略了什么?有没有一种特殊的方法可以并发运行多个嵌入式 Perl 解释器?即使我将并发线程数限制为 1,问题仍然存在。

C++库的相关部分如下:

extern "C" __declspec(dllexport) BOOL ExecutePerlScript(PCSTR* environmentVariables,
                                                        PCSTR path)
{
    BOOL result(FALSE);

    // Create the Perl interpreter
    PerlInterpreter* my_perl(perl_alloc());
    if (NULL != my_perl)
    {
        PERL_SET_CONTEXT(my_perl);
        PL_perl_destruct_level = 1;
        perl_construct(my_perl);
        PL_origalen = 1;
        PL_exit_flags |= PERL_EXIT_DESTRUCT_END;

        // Initialize the Perl interpreter
        result = (perl_parse(my_perl,
                             XsInit,
                             NR_DEFAULT_ARGUMENTS,
                             DEFAULT_ARGUMENTS,
                             const_cast<char**>(environmentVariables)) == 0) ? TRUE : FALSE;

        // Run the interpreter
        if (result)
        {
            result = (perl_run(my_perl) == 0) ? TRUE : FALSE;
        }

        if (result)
        {
            result = LoadFile(path,
                              my_perl);
        }

        if (result)
        {
            // Execute the Perl script
            eval_pv("eval \"$" SCRIPT_TO_EVALUATE_VARIABLE_NAME "; 1\" or do { $" SCRIPT_EXECUTION_ERROR_VARIABLE_NAME " = $@; }",
                    TRUE);
        }

        // Destruct the interpreter
        PL_perl_destruct_level = 1;
        perl_destruct(my_perl);
        perl_free(my_perl);
    }

    return result;
}

extern "C" BOOL WINAPI DllMain(HINSTANCE hinstDLL,
                               DWORD fdwReason,
                               LPVOID lpvReserved)
{
    BOOL result(FALSE);

    switch (fdwReason)
    {
    case DLL_PROCESS_ATTACH:
        if (0 == g_initCount)
        {
            PERL_SYS_INIT3(0,
                           NULL,
                           NULL);
        }
        g_initCount++;
        result = TRUE;
        break;
    case DLL_PROCESS_DETACH:
        if (g_initCount > 0)
        {
            g_initCount--;
            if (0 == g_initCount)
            {
                PERL_SYS_TERM();
            }
        }
        result = TRUE;
        break;
    }

    return result;
}

environmentVariables上述代码片段中的格式是一个数组,char*其中每个元素都在表单中,<variable name>=<variable value>并且数组的最后一个元素是NULL。

我运行的Perl脚本如下:

use strict;

use CGI qw/:standard/;

print "---- ENVIRONMENT ----\n";
for my $env (sort keys %ENV)
{
    print "$env = $ENV{$env}\n";
}
print "\n";

例如,其中一次执行(在循环中)将以下环境传递给 C++ 函数:

- AUTH_TYPE =
- CONTENT_LENGTH = 47
- CONTENT_TYPE = application/x-www-form-urlencoded
- GATEWAY_INTERFACE = CGI/1.1
- PATH_INFO = /test.pl
- PATH_TRANSLATED = E:\Perl\PerlTestApplication\test.pl
- QUERY_STRING = lang=nl
- REMOTE_ADDR = 1.2.3.4
- REMOTE_HOST = remote.host
- REMOTE_USER =
- REQUEST_METHOD = POST
- SCRIPT_NAME = /test.pl
- SERVER_NAME = example.domain
- SERVER_PORT = 443
- SERVER_PROTOCOL = HTTP/1.1
- SERVER_SOFTWARE = Microsoft-IIS/10.0

然后脚本打印以下环境:

---- ENVIRONMENT ----
AUTH_TYPE =
CONTENT_LENGTH = 45
CONTENT_TYPE = application/x-www-form-urlencoded
GATEWAY_INTERFACE = CGI/1.1
PATH_INFO = /test.pl
PATH_TRANSLATED = E:\Perl\PerlTestApplication\test.pl
QUERY_STRING = lang=nl
REMOTE_ADDR = 1.2.3.4
REMOTE_HOST = remote.host
REMOTE_USER =
REQUEST_METHOD = POST
SCRIPT_NAME = /test.pl
SERVER_NAME = example.domain
SERVER_PORT = 443
SERVER_PROTOCOL = HTTP/1.1
SERVER_SOFTWARE = Microsoft-IIS/10.0

可以看出,CONTENT_LENGTH变量的值不同,并且在 Perl 环境中的值与之前传递给脚本的环境相同。因此,不知何故,我传递给新的 Perl 解释器实例的环境没有被清理,仍然使用了另一个环境。我已经PERL_SET_CONTEXT在构造后立即使用 来设置当前线程中的上下文,但这似乎还不够。

我已在 Active Perl 安装的 Perl 5.24 和 Strawberry Perl 安装的 Perl 5.30 上尝试过此操作,但都给出了相同的错误结果。

我做错了什么?

windows
  • 1 个回答
  • 107 Views
Martin Hope
8legs tentacles
Asked: 2025-04-05 03:54:41 +0800 CST

当我隐藏主窗体并显示另一个窗体(如启动画面、登录或辅助 UI)时,该应用程序从任务栏中消失

  • 5

我目前正在学习 Delphi 的基础知识。

当我隐藏主窗体并显示新窗体时,任务栏上该程序的图标消失了。

 FRMsecond.show;
 Frmmain.hide;

我的程序.dpr如下所示:

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TFRMlogin, FRMlogin);
  Application.CreateForm(TFRMstatistics, FRMstatistics);
  Application.CreateForm(TFRMregister, FRMregister);
  Application.Run;
end.
windows
  • 2 个回答
  • 105 Views
Martin Hope
Lion King
Asked: 2025-04-02 09:23:34 +0800 CST

如何从汇编中正确调用 printf 函数?

  • 6

我试图用printf汇编语言调用 x86 C 函数,但出现链接错误:error LNK2019: unresolved external symbol _printf referenced in function _main。

.model flat, C
.code
extern printf: proc

main proc
    push offset msg
    push offset fmt
    call printf
    ret
main endp

.data
    msg db "Hello world!", 0
    fmt db "%s", 0
end

我怎样才能解决这个问题?

windows
  • 3 个回答
  • 78 Views
Martin Hope
Eugene Muzychenko
Asked: 2025-03-30 02:28:44 +0800 CST

DLU/像素比率不一致

  • 5

微软声称MapDialogRect使用GetDialogBaseUnits返回的 baseunitX/4 和 baseunitY/8 系数将 DLU 转换为像素。

但是,我在测试中没有看到这些系数。

例如,我在一个使用 MS Shell Dlg 字体 (8x16) 的对话框中有一个 50x14 DLU 的按钮。显示缩放比例为 100%,该过程未启用 DPI 感知。

调用 GetDialogBaseUnits,我得到 X 为 8、Y 为 16,因此系数应该是 2,2。

但是对 50x14 DLU 的矩形调用 MapDialogRect 时,我得到了一个 75x23 像素的矩形,因此实际系数为 1.5,1.5。按钮大小(以像素为单位)相同。

我在 XP、Win 7 和 Win 10 中测试了这一点,结果相同。

为什么 MapDialogRect 使用的系数与 GetDialogBaseUnits 返回的基本单位不对应?

windows
  • 1 个回答
  • 42 Views
Martin Hope
Colder
Asked: 2025-03-28 15:52:25 +0800 CST

如何在 Windows 上正常终止进程,类似于 SIGTERM?

  • 5

我希望优雅地退出目标进程,而不是直接终止它。进程 A 向进程 B 发送命令,B 收到命令后,完成清理任务然后退出。

  1. 目标进程不是控制台程序,所以我无法使用windows.GenerateConsoleCtrlEvent。
  2. 目标进程不是 GUI,所以我无法使用WM_CLOSE。

KillGolang包中的方法实际上os使用的是TerminateProcess,这不是我想要的。

更新:

  1. 我尝试让目标进程监听 stdin。子进程启动后立即结束。这似乎在非交互模式下不起作用。
    if runtime.GOOS == "windows" {
        reader := bufio.NewReader(os.Stdin)
        if _, err := reader.ReadString('\n'); err != nil {
            stop()
        }
    }
    
  2. 我尝试使用taskkill /t,但它告诉我目标进程是另一个进程的子进程。所以我调整了父子关系并让父进程调用taskkill /t,但它仍然返回错误Exit status 128。这很奇怪。

最后:

最后我使用命名管道解决了这个问题。缺点是它需要目标进程的代码支持。但这对我来说已经足够了,因为目标进程不是第三方进程。

windows
  • 2 个回答
  • 91 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve