Я бы просто оставил это как комментарий, но я не могу (слишком низкая репутация), но пытаюсь упростить ваш код:
DSolve[{D[y1[t, y2[t]], t] == 3*y1[t, y2[t]], D[y2[t], t] == 2*y1[t, y2[t]], y1[0, 0]
== 0,
y2[0] == 2}, {y1[t, y2[t]], y2[t]}, t]
выдает ошибку
DSolve::ivar2: The independent variable t should not appear in two different arguments of the dependent variable y1[t,y2[t]].
Так что я не совсем уверен, сможете ли вы заставить Mathematica делать то, что вы просите, если я правильно понимаю, что вы хотели. Я предлагаю спросить в Mathematica Stack Exchange , так как они, скорее всего, гораздо более опытны с этими типами проблем.
Это полностью зависит от реализации.
Это зависит как от аппаратных средств, так и от возраста компилятора. Для любого, имеющего достаточно современный компилятор (имеется в виду что-либо, основанное на стандарте начала 90-х или более поздних), аргумент size - это size_t
. Разумно это может быть самый большой 16-битный без знака, самый большой 32-битный без знака или самый большой 64-битный без знака, в зависимости от модели памяти, к которой компилируется компилятор. В этом случае вам просто нужно узнать, какой размер size_t
в вашей реализации. Однако для очень старых старых компиляторов (то есть до ANSI-C и , возможно, для некоторых ранних версий ANSI C ) все ставки отменены.
Со стороны стандартов глядя на Cygwin и Solaris 7, например, аргумент размера - это size_t
. Глядя на имеющуюся у меня встроенную систему, аргумент size представляет собой unsigned
(имеется в виду 16-битный unsigned). (Компилятор для этой встроенной системы был написан в 80-х годах.) Я нашел в Интернете ссылку на некий ANSI C , где параметром размера является int
.
Вы можете захотеть увидеть эта статья на size_t
, а также последующая статья о недостатке некоторых ранних версий GCC, где size_t
была ошибочно подписана.
Таким образом, для почти всех , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
unsigned
(имеется в виду 16-битный unsigned). (Компилятор для этой встроенной системы был написан в 80-х годах.) Я нашел в Интернете ссылку на некий ANSI C , где параметром размера является int
.
Вы можете захотеть увидеть эта статья на size_t
, а также последующая статья о недостатке некоторых ранних версий GCC, где size_t
была ошибочно подписана.
Таким образом, для почти всех , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
unsigned
(имеется в виду 16-битный unsigned). (Компилятор для этой встроенной системы был написан в 80-х годах.) Я нашел в Интернете ссылку на некий ANSI C , где параметром размера является int
.
Вы можете захотеть увидеть эта статья на size_t
, а также последующая статья о недостатке некоторых ранних версий GCC, где size_t
была ошибочно подписана.
Таким образом, для почти всех , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
без знака
(имеется в виду 16-битный без знака). (Компилятор для этой встроенной системы был написан в 80-х годах.) Я нашел в Интернете ссылку на некий ANSI C , где параметром размера является int
.
Вы можете захотеть увидеть эта статья на size_t
, а также последующая статья о недостатке некоторых ранних версий GCC, где size_t
была ошибочно подписана.
Таким образом, для почти всех , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
без знака
(имеется в виду 16-битный без знака). (Компилятор для этой встроенной системы был написан в 80-х годах.) Я нашел в Интернете ссылку на некий ANSI C , где параметром размера является int
.
Вы можете захотеть увидеть эта статья на size_t
, а также последующая статья о недостатке некоторых ранних версий GCC, где size_t
была ошибочно подписана.
Таким образом, для почти всех , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
int
.
Возможно, вы захотите посмотреть эту статью на size_t
], а также последующую статью о ошибочной функции некоторых ранних версий GCC, где size_t
была ошибочно подписана.
В целом, для почти каждый , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
int
.
Возможно, вы захотите посмотреть эту статью на size_t
], а также последующую статью о ошибочной функции некоторых ранних версий GCC, где size_t
была ошибочно подписана.
В целом, для почти каждый , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
Возможно, вы захотите увидеть эту статью на size_t
, а также дополнительную статью о недоработке некоторых ранних версий GCC, где size_t
был ошибочно подписан.
Таким образом, для почти каждый , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
Возможно, вы захотите увидеть эту статью на size_t
, а также дополнительную статью о недостатке некоторых ранних версий GCC, где size_t
был ошибочно подписан.
Таким образом, для почти каждый , size_t
будет правильной ссылкой для использования. Тем не менее, для тех немногих, кто использует встроенные системы или устаревшие системы с очень старыми компиляторами, вам нужно проверить свою справочную страницу.
Функции обычно используют size_t
для передачи размера в качестве параметра. Я говорю нормально, потому что fgets ()
использует параметр int
, что, на мой взгляд, является недостатком в стандарте C.
size_t
определяется как тип, который может содержит размер (в байтах) любого объекта, к которому вы можете получить доступ. Обычно это typedef из unsigned int
или unsigned long
.
Вот почему значения, возвращаемые оператором sizeof
, имеют тип size_t
.
So 2 ** ( sizeof (size_t)
* CHAR_BIT
) дает вам максимальный объем памяти, который может обработать ваша программа, но он, безусловно, не самый точный.
( CHAR_BIT
определено в limit.h
и дает количество битов, содержащихся в char
).
Они принимают аргумент size_t; так что это зависит от платформы.
Зависит от реализации, но вы можете посмотреть в файле заголовка (.h), который вам нужно включить, прежде чем вы сможете использовать memcpy. Объявление скажет вам (ищите size_t или другое).
И затем вы спрашиваете, что такое size_t, ну, это часть, зависящая от реализации.
Правильно, вы не можете копировать области размером более 2 ^ (sizeof (size_t) * 8) байтов. Но не о чем беспокоиться, потому что вы также не можете выделить больше места, потому что malloc
также принимает размер как параметр size_t.
Существует также проблема, связанная с тем, что size_t
может представлять стихи, которые ваша платформа позволит процесс на самом деле адрес.
Даже при использовании виртуальной памяти на 64-битной платформе вы вряд ли сможете вызвать memcpy ()
с размерами, превышающими несколько ТБ или около того, и даже тогда это довольно горячая машина .... трудно представить, как будет выглядеть машина, на которой можно было бы установить полностью покрытое 64-битное адресное пространство.
Не берите в голову встроенные системы, у которых всего несколько КБ. доступная для записи память, где не имеет смысла пытаться memcpy ()
больше информации, чем ОЗУ, независимо от определения size_t
. Подумайте о том, что только что произошло со стеком, содержащим адрес возврата от этого вызова, если вы это сделали?
Или системы, в которых виртуальное адресное пространство, видимое процессом, меньше установленной физической памяти. Это на самом деле имеет место, например, с процессом Win32, работающим на платформе Win64. (Впервые я столкнулся с этим во время совместного использования ОС TSX-11, работающей на PDP-11, с 4 МБ физической памяти и виртуальным адресом 64 КБ в каждом процессе. Тогда 4 МБ ОЗУ было много памяти, а IBM IBM не существует еще.)